在 Go 中,可以声明具有不同作用域的变量:本地(函数作用域)和顶级(包或文件范围)。有时,您可能会遇到这样的情况:您想要引用函数作用域内的顶级常量或变量,其中存在同名的局部变量。
请考虑以下代码片段:
package main import "fmt" const name = "Yosua" // or var name string = "James" func main() { name := "Jobs" fmt.Println(name) }
问题:如何引用常量名称而不是本地变量?
答案:
在存在同名局部变量的情况下访问封闭范围变量是不可能的。当局部变量在作用域内时,它会遮蔽函数内的外部变量,使其无法访问。
Go 语言规范规定:
An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.
替代方案:
如果您需要同时访问顶级变量和局部变量,请考虑使用不同的名称。但是,如果这不可行,您可以采用以下替代方法:
临时分配给新变量:
例如:
cname := name name := "Jobs" fmt.Println(name) fmt.Println(cname)
间接公开顶级变量:
例如:
func getName() string { return name } name := "Jobs" fmt.Println(name) fmt.Println(getName())
以上是当存在同名局部变量时,如何访问 Go 中的顶级常量或变量?的详细内容。更多信息请关注PHP中文网其他相关文章!