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
Libérer: 2024-12-14 22:18:19
original
433 Les gens l'ont consulté

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)
}
Copier après la connexion

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)
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal