Go中局部全局變量的區分


這是可能也許是容易混淆滴,先上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)
}

上面會輸出:

大蝦小蝦大蝦大蝦

通過上面幾個例子,我想大家也應該有深入的理解啦。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM