Heim > Backend-Entwicklung > Golang > Warum zeigt mein Go-Compiler Fehler „Deklariert, aber nicht verwendet' für Variablen an, die ich verwende?

Warum zeigt mein Go-Compiler Fehler „Deklariert, aber nicht verwendet' für Variablen an, die ich verwende?

Patricia Arquette
Freigeben: 2024-12-15 00:09:16
Original
181 Leute haben es durchsucht

Why Does My Go Compiler Show

Go-Compiler: Deklarierte, aber nicht verwendete Fehler für Variablen, die verwendet werden sollen

Problem:

Beim Kompilieren eines Go Funktion markiert der Compiler mehrere Variablen als „deklariert und nicht verwendet“, obwohl die Variablen eindeutig innerhalb der verwendet werden 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)
}
Nach dem Login kopieren

Der Compiler generiert Warnungen für:

  • m
  • err
  • key

Lösung:

Wie von @kostix hervorgehoben, Der Fehler entsteht, weil die Variable m im Rahmen der if-Anweisung definiert ist. Um dieses Problem zu lösen, verschieben Sie die Deklaration von m in den Gültigkeitsbereich der Funktion und stellen Sie sicher, dass sie in der gesamten Funktion zugänglich ist:

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)
}
Nach dem Login kopieren

Jetzt wird die Variable m einmal deklariert und in beiden if-Zweigen verwendet, wodurch der Compiler korrigiert wird wahrgenommenes Missverhältnis. Darüber hinaus sollten auch die Compiler-Warnungen für err und key verschwinden, da diese auch innerhalb der Funktion verwendet werden.

Das obige ist der detaillierte Inhalt vonWarum zeigt mein Go-Compiler Fehler „Deklariert, aber nicht verwendet' für Variablen an, die ich verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage