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
Patricia Arquetteoriginal
2024-12-15 00:09:16196parcourir

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)
}

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)
}

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!

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