Nik*_*l H 3 scope go shadowing
这是有问题的代码片段:
package main
import (
"fmt"
)
var a string = "hello"
func main() {
b := "world"
fmt.Println(a, b)
a := "bye"
fmt.Println(a, b)
}
Run Code Online (Sandbox Code Playgroud)
输出:
hello world
bye world
Run Code Online (Sandbox Code Playgroud)
我的问题是,如何解决“全局”和“本地”变量之间的名称冲突a?
更具体地说,我如何告诉 Goa使用哪个?
Har*_*ren 10
我认为您的原始示例很好地说明了这种情况。就像大多数编程语言一样,范围很重要。
最接近用途的范围决定了 的值a。因此,如果您:=在函数内重新声明 ( ) 变量,那么在该函数的持续时间内,您将拥有值"bye"。
如果你选择对两件事使用相同的名字,结果是内在的名字总是占主导地位。如果您需要这两个值,则以不同的方式命名变量。
嗯,这并不是真正的解决方案,而是一种解决方法。在创建影子变量之前,您可以创建一个指向外部变量的指针。
var a string = "hello"
func main() {
b := "world"
fmt.Println(a, b)
pa := &a
a := "bye"
fmt.Println(*pa, b, a)
}
Run Code Online (Sandbox Code Playgroud)