Go中的覆盖范围

Go中的覆盖范围,go,scope,overriding,Go,Scope,Overriding,我实际上是一个新手,无法找到如何覆盖go中变量的范围 考虑一下 package main import ( "fmt" ) var x = 10 var a int = 10 func main() { var a int = 20 fmt.Println(a) } 当我运行它时,输出是20,这意味着它实际上打印了局部范围变量 如何在主函数中显示全局变量“a”您正在执行的操作称为“变量阴影”。如果您想访问全局变量,唯一的选择就是不要对其进行阴影处理 当然,可以在阴

我实际上是一个新手,无法找到如何覆盖go中变量的范围

考虑一下

package main

import (
    "fmt"
)

var x = 10
var a int = 10

func main() {
    var a int = 20
    fmt.Println(a)
}
当我运行它时,输出是20,这意味着它实际上打印了局部范围变量


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

您正在执行的操作称为“变量阴影”。如果您想访问全局变量,唯一的选择就是不要对其进行阴影处理

当然,可以在阴影之前将全局值保留在不同的局部变量中。我无法想象这什么时候真的有用:


你所做的就是所谓的“可变阴影”。如果您想访问全局变量,唯一的选择就是不要对其进行阴影处理

当然,可以在阴影之前将全局值保留在不同的局部变量中。我无法想象这什么时候真的有用:


“如何在主函数中显示全局变量‘a’”。通过不创建同名的局部变量。1。)我没有说在C/C++中不可能。2.)您的问题是关于Go的,我的评论也是。“如何在主函数中显示全局变量‘a’”。通过不创建同名的局部变量。1。)我没有说在C/C++中不可能。2)你的问题是关于Go,我的评论也是这样。我实际上是C++的,我们在学习的时候使用了它很多次,它可以用“:”操作符很容易地被阴影。所以我只是在想围棋有没有可能。谢谢你的帮助。@Nivas认为语言允许你做某事,并不意味着这是个好主意!我已经记不清跟踪到隐藏变量的bug数量。至少在GO, GE-VIT-EXTIO/CODE>可以在它们引起严重问题之前帮助捕捉到这些问题。实际上,我是从C++中学习的,我们在学习中使用了很多次,并且可以很容易地使用“:”操作符来隐藏。所以我只是在想围棋有没有可能。谢谢你的帮助。@Nivas认为语言允许你做某事,并不意味着这是个好主意!我已经记不清跟踪到隐藏变量的bug数量。至少在围棋中,
Go-vet-shadow
可以帮助在它们引起严重问题之前抓住其中一些。
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
}