Erreurs « Variable déclarée et non utilisée » du compilateur Go malgré l'utilisation réelle
La fonction suivante dans Go génère « variable déclarée et non utilisée » erreurs :
type Comparison struct { Left []byte Right []byte Name string } 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) 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) }
Les erreurs include :
Cependant, après un examen plus approfondi, cela devient il est clair que les variables m, err et key sont effectivement utilisées.
Cause et Solution
Comme l'a souligné @kostix, le problème réside dans la portée de m. Dans le code donné, m est déclaré dans le cadre des instructions if et else. Pour résoudre ce problème, la déclaration de m doit être déplacée en dehors de ces blocs :
type Comparison struct { Left []byte Right []byte Name string } 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) // NOTE! now m is 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) }
En faisant de m une variable de portée fonction, elle est accessible et utilisée dans toute la fonction, résolvant ainsi le problème "déclaré et non erreurs "utilisées".
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!