2016-08-05 35 views
4

GO中是否有顯式數組初始化(聲明和賦值)還是唯一的方法是使用簡寫運算符? 這裏是一個實際的例子 - 這是兩個平等:GO顯式數組初始化

a := [3]int{1, 0, 1} 

var a [3]int = [3]int{1, 0, 1} 

回答

7

他們是等價的。一般來說:Spec: Short variable declaration:

一個短變量聲明使用語法:

ShortVarDecl = IdentifierList ":=" ExpressionList . 

這是一個普通variable declaration與初始化表達式速記,但沒有類型:

"var" IdentifierList = ExpressionList . 

所以這一行:

a := [3]int{369, 0, 963} 

與當前相同的:

var a = [3]int{369, 0, 963} 

但由於表達式列表是[3]int類型的composite literal,以下是一樣的:

var a [3]int = [3]int{369, 0, 963} 

Spec: Variable declaration:

如果一個類型存在,每個變量都被賦予該類型。否則,每個變量都被賦予相應初始化值的類型。

所以,你可以使用任何以下的所有聲明和初始化[3]int類型的變量:

a := [3]int{369, 0, 963} 
b := [...]int{369, 0, 963} 
var c = [3]int{369, 0, 963} 
var d [3]int = [3]int{369, 0, 963} 
var e [3]int = [...]int{369, 0, 963} 
var f = [...]int{369, 0, 963} 

注:

注意,在複合文字,它是有效的沒有列出所有的值。其值未明確指定的元素將是元素類型的zero value。您可以在枚舉中的值之前包含一個可選索引,以指定其值將爲的值。

Spec: Composite literals:

對於陣列和切片文字,適用下列規則:

  • 每個元件具有相關聯的整數索引標誌着其在陣列中的位置。
  • 帶鍵的元素使用鍵作爲其索引;該鍵必須是一個常量整數表達式。
  • 沒有鍵的元素使用上一個元素的索引加上一個。如果第一個元素沒有鍵,則其索引爲零。

由於初始數組包含一個0這對於元素類型int零值,則可能從字面排除。要創建和初始化變量的值[3]int{369, 0, 963},你也可以做這樣的:

// Value at index 1 implicitly gets 0: 
g := [3]int{369, 2: 963} 
h := [...]int{369, 2: 963} 

嘗試在Go Playground所有例子。

詳情請參見+實際的例子這樣一個問題:Keyed items in golang array initialization