冲突全局和局部变量名称

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)
}

以上是关于冲突全局和局部变量名称的主要内容,如果未能解决你的问题,请参考以下文章

js冲突怎么解决

局部变量和全局变量

JS (全局作用域)

打印所有全局变量/局部变量?

19.8.9(全局变量和局部变量的作用域)

Python3——局部变量和全局变量