首页 > 后端开发 > Golang > 为什么我的 Go 代码即使使用了变量也会产生'变量已声明但未使用”错误?

为什么我的 Go 代码即使使用了变量也会产生'变量已声明但未使用”错误?

Patricia Arquette
发布: 2024-12-14 22:18:19
原创
426 人浏览过

Why Does My Go Code Produce

尽管实际使用,Go 编译器仍出现“变量已声明但未使用”错误

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)
}
登录后复制

错误包括:

  • dpcompare.go:171: m 声明但未使用
  • dpcompare.go:171: err 声明但未使用
  • dpcompare.go:173 : m 声明但未使用
  • dpcompare.go:173:错误声明但未使用
  • dpcompare.go:178:未定义:m
  • dpcompare.go:185:声明密钥但未使用

但是,在接近时检查后,很明显变量 m、err 和 key 确实被

原因和解决方案

正如@kostix指出的,问题在于m的范围。在给定的代码中,m 在 if 和 else 语句的范围内声明。为了解决这个问题,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! now m is 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 成为函数范围的变量,可以在整个函数中访问和使用它,解决了“声明而不是声明”的问题。使用”错误。

以上是为什么我的 Go 代码即使使用了变量也会产生'变量已声明但未使用”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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