variables - Golang 切换变量作用域

标签 variables go scope switch-statement

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

相关文章:

amazon-web-services - 有没有一种方法可以使用aws-sdk-go验证aws帐户的凭据

go - 是否可以获取返回了返回值的源代码行?

ruby-on-rails - 请按语法排序 Mongoid Scope

javascript - 调用 $.get 方法时如何使 javascript 变量成为全局变量?

javascript - 需要帮助 : I think I'm missing a key concept on how JS variables behave within For Loops

javascript - 在 JavaScript 循环中声明相同的变量名

go - 如何获取大整数的自然对数

variables - 如何在 JasperReports 中按需更改变量值

javascript - 变量中大括号和引号的区别

Javascript 闭包访问与循环内的回调