首页 >后端开发 >Golang >为什么我的 Go 编译器对我正在使用的变量显示'已声明但未使用”错误?

为什么我的 Go 编译器对我正在使用的变量显示'已声明但未使用”错误?

Patricia Arquette
Patricia Arquette原创
2024-12-15 00:09:16183浏览

Why Does My Go Compiler Show

Go 编译器:对于要使用的变量出现声明但未使用的错误

问题:

编译 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)
}

编译器生成警告对于:

  • m
  • err
  • key

解决方案:

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn