【问题标题】:Golang Switch variable scopeGolang 切换变量范围
【发布时间】:2018-05-14 15:29:03
【问题描述】:

我正在尝试找出 Golang 中的简单开关,但我遇到了变量范围。

var body string
var errs error
req := gorequest.New()
var resp gorequest.Response
switch verb {
case 0:
    resp, body, errs := req.Get(suburl).
        Set("X-Auth-Token", d.Token).
        Set("Content-type", "application/json").
        End()
}
if errs != nil {
    return &ConnResponse{resp.StatusCode, body, fmt.Errorf("%s", errs)}
}

我已经在 switch 之前声明了 resp、body、errs 和 req,并且我认为它们将在 switch body 之后可用。 编译器返回的错误低于(来自案例声明)

# command-line-arguments
./conn.go:135:3: resp declared and not used
./conn.go:135:9: body declared and not used
./conn.go:135:15: errs declared and not used

所以我很好奇开关体内的变量范围与函数中声明的有什么不同?这段代码看起来如何能够在切换主体后访问数据。

【问题讨论】:

标签: variables go scope switch-statement


【解决方案1】:

您的问题在这一行:

resp, body, errs := req.Get(suburl)

短变量声明运算符:= 创建新变量并为它们赋值。这些 new 变量被称为“隐藏”了您在外部范围中创建的变量,因为它们具有相同的名称,因此它们在该范围内“隐藏”了外部范围的变量。要解决此问题,只需将值从外部范围分配给现有变量,而不是创建新变量:

resp, body, errs = req.Get(suburl)

注意这里使用赋值=,而不是短声明:=

【讨论】:

  • 是的,这就是问题所在。我一开始没有注意到这一点。感谢您的帮助
猜你喜欢
  • 2016-11-20
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2021-12-29
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多