Maison > développement back-end > Golang > Pourquoi mon compilateur Go signale-t-il les variables comme inutilisées alors qu'elles sont clairement utilisées ?

Pourquoi mon compilateur Go signale-t-il les variables comme inutilisées alors qu'elles sont clairement utilisées ?

Patricia Arquette
Libérer: 2024-12-17 11:34:24
original
632 Les gens l'ont consulté

Why Does My Go Compiler Flag Variables as Unused When They Are Clearly Used?

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

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

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