golang基礎 區域性變數初始化

2022-09-03 08:42:12 字數 962 閱讀 3322

操作 := 只能用於方法內部, 宣告並初始化新的變數

v := 3

但是不能用於已宣告變數賦值, 下面的做法編譯器會報錯誤"no new variables on left side of :="

var v int = 0

v := 1

通過錯誤可以了解到, := 操作左邊必須要有新變數, 那麼多個變數初始化只需要滿足左邊至少有乙個新變數即可

err := errors.new("

error1")

ret, err := test_fun()

這種做法是合法的, 因為ret是新變數, 這樣就很方便了, 因為go方法經常會返回錯誤err, 那麼在同乙個方法內

只需要宣告乙個err變數即可

由於:=只能用於區域性變數, 那麼下面的**會發生什麼情況呢?

var

outint = 1

func test()

變數out的作用域包含test(), 但是實際上:= 操作會新建立新的區域性變數out, 謹記!!!

那麼類似情況: 

func test1()     

}

編譯器會不會報"no new variables on left side of :="? 編譯器沒有報錯,所以兩個v是不同的變數

在go中 if for switch都可能產生特殊作用域的區域性變數,在if for switch中有變數賦值時需要注意 :=

結論:1 := 左邊出現了同層作用域的區域性變數,只是賦值操作,沒有新生成區域性變數

2 := 左邊出現了上層作用域的區域性變數,新生成同名區域性變數並賦值

3 := 左邊出現了非區域性變數,生成與非區域性變數同名的區域性變數

區域性變數和全域性變數的初始化

寫 的時候遇到了這個問題,選兩段抄過來做個筆記。定義區域性變數,其實就是在棧中通過移動棧指標來給程式提供乙個記憶體空間和這個區域性變數名繫結。因為這段記憶體空間在棧上,而棧記憶體是反覆使用的 髒的,上次用完沒清零的 所以說使用棧來實現的區域性變數定義時如果不顯式初始化,值就是髒的。在c語言裡,全域性...

區域性變數和成員變數初始化的不同

1.區別 值型別的 區域性變數必須初始化,成員變數宣告時預設初始化。也就是說,區域性變數使用前,必須賦值。而成員變數 會預設賦值,不必須。2.預設值是什麼?成員變數中里的,基本數值型別預設初始值為0,string等非基本型別初始化為null。why?值型別在棧中,值在是在棧中。而string等引用型...

c 中區域性變數初始化的問題

在c語言裡,全域性變數如果不初始化的話,預設為0,也就是說在全域性空間裡 編譯器在編譯的時候針對這兩種情況會產生兩種符號放在目標檔案的符號表中,對於初始化的,叫強 符號,未初始化的,叫弱符號。聯結器在連線目標檔案的時候,如果遇到兩個重名符號,會有以下處理規 則 1 如果有多個重名的強符號,則報錯。2...