问题:
编译 Go 时函数中,编译器将几个变量标记为“声明但未使用”,尽管这些变量在函数中明确使用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) }
编译器生成警告对于:
解决方案:
作为@kostix指出,出现错误是因为变量 m 是在 if 的范围内定义的 陈述。要解决此问题,请将 m 的声明移动到函数的作用域,确保它可以在整个函数中访问:
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) }
现在,变量 m 被声明一次并在两个 if 分支中使用,从而纠正了编译器的感知到的不匹配。此外,针对 err 和 key 的编译器警告也应该消失,因为它们也在函数内使用。
以上是为什么我的 Go 编译器对我正在使用的变量显示'已声明但未使用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!