【发布时间】:2011-05-30 14:55:01
【问题描述】:
我有以下函数给我“已声明但未使用的变量”错误:
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 在第 171 行和第 173 行都声明了,因此它们必须是 m 的不同实例,并且也不同于第 178 行上的实例,这是未定义的。同样,err 在第 171 行和第 173 行声明,因此它们不能是先前在第 167 行声明的 err 实例。如果将声明的变量与相同名称相乘,您将在 C++、C99 或 Java 中得到类似的消息。
标签: compiler-errors go