首页 > 后端开发 > Golang > 为什么我的 Go 编译器在明确使用变量时将其标记为未使用?

为什么我的 Go 编译器在明确使用变量时将其标记为未使用?

Patricia Arquette
发布: 2024-12-17 11:34:24
原创
634 人浏览过

Why Does My Go Compiler Flag Variables as Unused When They Are Clearly Used?

编译器在使用变量时将其标记为未使用

在 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板