Maison > développement back-end > Golang > Pourquoi mon compilateur Go affiche-t-il des erreurs « Déclarées mais non utilisées » pour les variables que j'utilise ?

Pourquoi mon compilateur Go affiche-t-il des erreurs « Déclarées mais non utilisées » pour les variables que j'utilise ?

Patricia Arquette
Libérer: 2024-12-15 00:09:16
original
269 Les gens l'ont consulté

Why Does My Go Compiler Show

Compilateur Go : erreurs déclarées mais non utilisées pour les variables destinées à être utilisées

Problème :

Lors de la compilation d'un Go fonction, le compilateur marque plusieurs variables comme « déclarées et non utilisées », bien que les variables soient clairement utilisées dans la fonction code.

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

Le compilateur génère des avertissements pour :

  • m
  • err
  • key

Solution :

Comme l'a souligné @kostix, l'erreur survient car la variable m est définie dans le cadre de l'instruction if. Pour résoudre ce problème, déplacez la déclaration de m dans la portée de la fonction, en vous assurant qu'elle est accessible dans toute la fonction :

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

Maintenant, la variable m est déclarée une fois et utilisée dans les deux branches if, corrigeant ainsi le comportement du compilateur. inadéquation perçue. De plus, les avertissements du compilateur pour err et key devraient également disparaître car ils sont également utilisés dans la fonction.

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