冲突全局和局部变量名称
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冲突全局和局部变量名称相关的知识,希望对你有一定的参考价值。
以下是相关代码段:
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
?
答案
我认为你原来的例子很好地说明了情况。就像大多数编程语言一样,范围很重要。
最接近使用的范围是决定a
的价值。因此,如果您在函数内重新声明(:=
)变量,那么在该函数的持续时间内,您将获得值"bye"
。
如果您选择对两件事使用相同的名称,结果是内部名称将始终占主导地位。如果您需要两个值,则以不同方式命名变量。
另一答案
这称为变量阴影。你只需要用不同的名字命名
你不能只是要求去表现不同。
另一答案
嗯,这不是一个真正的解决方案,而是一种解决方法。在创建shadowning变量之前,可以创建指向外部变量的指针。
var a string = "hello"
func main() {
b := "world"
fmt.Println(a, b)
pa := &a
a := "bye"
fmt.Println(*pa, b, a)
}
以上是关于冲突全局和局部变量名称的主要内容,如果未能解决你的问题,请参考以下文章