编译器在使用变量时将其标记为未使用
在 Go 中,即使在所讨论的变量显然正在被利用。这可能会令人困惑,但解决方案通常在于理解变量作用域。
在以下函数中遇到这样的错误:
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) }
编译器将 m 和 err 标记为未使用,尽管他们明显的用法。解决此问题的关键是认识到变量 m 的作用域位于 if 语句内。要在此范围之外使用 m,必须在函数级别声明它。
以下修订后的代码解决了此问题:
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: m is now declared at the function level 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) }
以上是为什么我的 Go 编译器在明确使用变量时将其标记为未使用?的详细内容。更多信息请关注PHP中文网其他相关文章!