Maison >développement back-end >Golang >Pourquoi mon code Go produit-il des erreurs « Variable déclarée et non utilisée » même si les variables sont utilisées ?

Pourquoi mon code Go produit-il des erreurs « Variable déclarée et non utilisée » même si les variables sont utilisées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-14 22:18:19427parcourir

Why Does My Go Code Produce

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 :

  • dpcompare.go:171 : m déclaré et non utilisé
  • dpcompare.go:171 : err déclaré et non utilisé
  • dpcompare.go:173 : m déclaré et non utilisé
  • dpcompare.go:173 : err déclaré et non utilisé utilisé
  • dpcompare.go:178 : non défini : m
  • dpcompare.go:185 : clé déclarée et non utilisée

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn