欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Go中局部全局变量的区分

程序员文章站 2022-05-04 13:53:02
这是可能也许是容易混淆滴,先上1个例子: 上面会输出: 我们稍微改动下: 上面会输出: 可见声明的全局变量var nickname 在函数change里面重载更新了,再次输出时已经是被更新后的值。我们再看一个函数变量域 上面会输出: 通过上面几个例子,我想大家也应该有深入的理解啦。 ......

这是可能也许是容易混淆滴,先上1个例子:

package main
import "fmt"
var nickname = "大虾"
func main() {
    show() //大虾
    change() //小虾
    show() //大虾
    fmt.print(nickname) //大虾
}

func show() { print(nickname) }

func change() {
    nickname := "小虾"
    print(nickname)
}

上面会输出:

大虾大虾小虾大虾

我们稍微改动下:

package main
import "fmt"
var nickname = "大虾"
func main() {
    show() //大虾
    change() //小虾
    show() //这里不再是 大虾 而是 虾
    fmt.println(nickname) //这里不再是 大虾 而是 虾
}

func show() { print(nickname) }

func change() {
    nickname = "小虾" // 注意这里不再是 nickname := "小虾"
    print(nickname)
}

上面会输出:

大虾小虾小虾小虾

可见声明的全局变量var nickname 在函数change里面重载更新了,再次输出时已经是被更新后的值。
我们再看一个函数变量域

package main
var nickname string

func main() {
    nickname = "大虾"
    print(nickname) //大虾
    change()
    println(nickname) //大虾
}

func change() {
    nickname := "小虾"
    print(nickname) //小虾
    show() //大虾 上面只是nickname := 只是初始化声明变量。仅在函数内有效,全局变量nickname未变
}

func show() {
    print(nickname)
}

上面会输出:

大虾小虾大虾大虾

通过上面几个例子,我想大家也应该有深入的理解啦。