這是可能也許是容易混淆滴,先上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) }
上面會輸出:
大蝦小蝦大蝦大蝦
通過上面幾個例子,我想大家也應該有深入的理解啦。