Rumah >pembangunan bahagian belakang >Golang >Mengapa Pengkompil Go Saya Menunjukkan Ralat 'Diisytiharkan tetapi Tidak Digunakan' untuk Pembolehubah yang Saya Gunakan?
Isu:
Apabila menyusun Go fungsi, pengkompil menandakan beberapa pembolehubah sebagai "diisytiharkan dan tidak digunakan," walaupun pembolehubah itu jelas digunakan dalam kod.
func img(w http.ResponseWriter, r *http.Request, c appengine.Context, u *user.User) { key := datastore.NewKey("Comparison", r.FormValue("id"), 0, nil) side := r.FormValue("side") comparison := new(Comparison) err := datastore.Get(c, key, comparison) check(err) var m Image if( side == "left"){ m, _, err := image.Decode(bytes.NewBuffer(comparison.Left)) } else { m, _, err := image.Decode(bytes.NewBuffer(comparison.Right)) } check(err) w.Header().Set("Content-type", "image/jpeg") jpeg.Encode(w, m, nil) }
Pengkompil menjana amaran untuk:
Penyelesaian:
Sebagai ditunjukkan oleh @kostix, ralat timbul kerana pembolehubah m ditakrifkan dalam skop pernyataan if. Untuk menyelesaikan masalah ini, alihkan pengisytiharan m ke skop fungsi, memastikan ia boleh diakses sepanjang keseluruhan fungsi:
func img(w http.ResponseWriter, r *http.Request, c appengine.Context, u *user.User) { key := datastore.NewKey("Comparison", r.FormValue("id"), 0, nil) side := r.FormValue("side") comparison := new(Comparison) err := datastore.Get(c, key, comparison) check(err) // Declare m in the function's scope var m Image if( side == "left"){ m, _, err := image.Decode(bytes.NewBuffer(comparison.Left)) } else { m, _, err := image.Decode(bytes.NewBuffer(comparison.Right)) } check(err) w.Header().Set("Content-type", "image/jpeg") jpeg.Encode(w, m, nil) }
Kini, pembolehubah m diisytiharkan sekali dan digunakan dalam kedua-dua cabang if, membetulkan pengkompil ketidakpadanan yang dirasakan. Selain itu, amaran pengkompil untuk ralat dan kunci juga harus hilang kerana ia juga digunakan dalam fungsi.
Atas ialah kandungan terperinci Mengapa Pengkompil Go Saya Menunjukkan Ralat 'Diisytiharkan tetapi Tidak Digunakan' untuk Pembolehubah yang Saya Gunakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!