標籤:io ar 問題 div 代碼 amp new type
go的變數聲明有幾種方式:
1 通過關鍵字 var 進行聲明
例如:var i int 然後進行賦值操作 i = 5
2 最簡單的,通過符號 := 進行聲明和賦值
例如: i:=5 golang會預設它的類型
下面看一段代碼,我們先聲明一個變數a,然後再重新聲明變數a,b,在這個函數中,變數a被聲明了2次,成為a的重聲明(redeclare),執行結果為23
package main
import (
"fmt"
)
func main(){
a:=1
a,b:=2,3
fmt.Println(a,b)
}
精彩的部分來了,請看第二段代碼
package main
import (
"fmt"
)
type A struct{
i int
}
func main(){
testA:=&A{}
testA.i=1
testA.i,b:=2,3
fmt.Println(testA.i,b)
}
我們定義了一個簡單的結構體A,A中的成員變數為i,我們在testA.i,b:=2,3對成員變數進行了新的聲明和賦值,執行會報錯。
原因:這個問題Google上是有過討論的
Unlike regular variable declarations, a short variable declaration may redeclare variables provided they were originally declared earlier in the same block with the same type, and at least one of the non-blank variables is new. As a consequence, redeclaration can only appear in a multi-variable short declaration. Redeclaration does not introduce a new variable; it just assigns a new value to the original.
從go的spec看,redeclare是一個賦值,不是建立個新變數,為什麼對於成員變數不可以,只能暫時理解成設計問題吧 這裡是一個小坑,玩golang的請注意