Go中的覆盖范围

时间:2019-01-01 17:16:38

标签: go scope override

我实际上是新手,我无法找到如何在Go中覆盖变量范围的方法

考虑这个...

package main

import (
    "fmt"
)

var x = 10
var a int = 10

func main() {
    var a int = 20
    fmt.Println(a)
}

当我运行它时,输出为20,这意味着它实际上会打印局部范围变量

如何在主函数中显示全局变量'a'

1 个答案:

答案 0 :(得分:4)

您正在做的事情称为“可变阴影”。如果要访问全局变量,唯一的选择就是不隐藏它

var a int = 10

func main() {
    var localA int = 20
    fmt.Println(a) // 10
    fmt.Println(localA) // 20
}

当然,您可以在阴影之前将全局值保留在其他局部变量中。我无法想象这什么时候实际上是有用的:

var a int = 10

func main() {
    globalA := a
    var a int = 20
    fmt.Println(a) // 20
    fmt.Println(globalA) // 10
}