Le compilateur marque la variable comme inutilisée lorsqu'elle est utilisée
Dans Go, on peut rencontrer des erreurs indiquant "déclaré et non utilisé" même lorsque les variables en question sont clairement utilisées. Cela peut paraître déroutant, mais la solution réside souvent dans la compréhension de la portée de la variable.
Une telle erreur a été rencontrée dans la fonction suivante :
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) }
Le compilateur a marqué m et s'est trompé comme inutilisé, malgré leur usage évident. La clé pour résoudre ce problème est de reconnaître que la variable m est comprise dans l'instruction if. Pour utiliser m en dehors de cette portée, il doit être déclaré au niveau de la fonction.
Le code révisé suivant résout ce problème :
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: m is now declared at the function level 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) }
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!