以下是相关代码段:
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
?
答案 0 :(得分:4)
我认为你原来的例子很好地说明了情况。就像大多数编程语言一样,范围很重要。
最接近使用的范围是决定a
的值的原因。因此,如果您在函数内重新声明(:=
)变量,那么在该函数的持续时间内,您将获得值"bye"
。
如果您选择对两件事使用相同的名称,结果是内部名称将始终占主导地位。如果您需要两个值,则以不同方式命名变量。
答案 1 :(得分:0)
这称为变量阴影。 你只需要用不同的名字命名
你不能只是要求采取不同的行为。
答案 2 :(得分:0)
嗯,这不是一个真正的解决方案,而是一种解决方法。在创建一个shadowning变量之前,你可以创建一个指向外部变量的指针。
var a string = "hello"
func main() {
b := "world"
fmt.Println(a, b)
pa := &a
a := "bye"
fmt.Println(*pa, b, a)
}