Golang开关变量范围

pag-r:

我试图找出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)}
}

我已经在切换之前声明了resp,body,errs和req,我认为在切换正文之后它们将可用。编译器返回的错误低于错误(来自大小写声明)

# 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

所以我很好奇,开关体内的变量作用域与函数中声明的有所不同吗?切换后,这段代码看起来如何能够访问数据。

阿德里安:

您的问题在以下行中:

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

简短的变量声明运算符:= 创建新变量并为其分配值。据说这些变量“隐藏”了在外部作用域中创建的变量,因为它们具有相同的名称,因此它们“隐藏”了该作用域中的外部作用域变量。要解决此问题,只需将值分配给外部作用域中的现有变量,而不是创建新变量:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章