我有以下函数给我“已声明变量且未使用变量”错误:
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) }
它给了我以下错误:
dpcompare.go:171: m declared and not used dpcompare.go:171: err declared and not used dpcompare.go:173: m declared and not used dpcompare.go:173: err declared and not used dpcompare.go:178: undefined: m dpcompare.go:185: key declared and not used
东西是m,,err并且key都在使用中。我无法解释为什么编译器认为您不是。
m
err
key
正如@kostix所说,m是本地范围if。试试这个代码
if
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) }