【发布时间】:2017-12-03 23:07:02
【问题描述】:
这里是有问题的代码sn-p:
package main
import (
"fmt"
)
var a string = "hello"
func main() {
b := "world"
fmt.Println(a, b)
a := "bye"
fmt.Println(a, b)
}
输出:
hello world
bye world
我的问题是,如何解决“全局”和“本地”变量 a 之间的名称冲突?
更具体地说,我如何告诉 Go 使用哪个 a?
【问题讨论】:
-
等等,这不是“冲突”,而是所谓的“阴影”。您是否在问
main内部的代码是否可以引用全局a,即使内部a正在隐藏(隐藏)它? -
顺便说一句,这可能会有所帮助:developmentality.wordpress.com/2014/03/03/…(通过谷歌搜索“golang shadow”找到它)
-
如果您想更改全局变量的值,只需执行
a = "bye"而不是a := "bye" -
@RayToal 是的,这就是我所要求的,但从下面的答案看来,这可能是不可能的。
-
在许多其他编程语言中都是可能的(例如,C++ 有
::,Ada 有subprogram.name),但 Go 似乎没有办法做到这一点。