Go Compiler's "Variable Declared and Not Used" Errors Despite Actual Usage
The following function in Go yields "variable declared and not used" errors:
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) }
The errors include:
However, upon closer examination, it becomes clear that the variables m, err, and key are indeed being used.
Cause and Solution
As pointed out by @kostix, the issue lies in the scope of m. In the given code, m is declared within the scope of the if and else statements. To fix this, the declaration of m should be moved outside of these blocks:
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) }
By making m a function-scoped variable, it can be accessed and used throughout the entire function, resolving the "declared and not used" errors.
The above is the detailed content of Why Does My Go Code Produce 'Variable Declared and Not Used' Errors Even Though the Variables Are Used?. For more information, please follow other related articles on the PHP Chinese website!