我试图找出 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 主体之后可用。 编译器返回的是以下错误(来自案例声明)
# 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
所以我很好奇 switch 体内的变量作用域与函数中声明的有什么不同?这段代码看起来如何能够在switch body之后访问数据。
最佳答案
您的问题在这一行:
resp, body, errs := req.Get(suburl)
短变量声明运算符 :=
创建新变量 并为其赋值。这些新变量据说“隐藏”了您在外部范围内创建的变量,因为它们具有相同的名称,因此它们“隐藏”了该范围内的外部范围变量。要解决此问题,只需从外部范围将值分配给现有变量,而不是创建新变量:
resp, body, errs = req.Get(suburl)
注意这里使用赋值 =
而不是短声明 :=
。
关于variables - Golang 切换变量作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50334006/