icz*_*cza 8

它们是等价的.一般来说:规范:短变量声明:

ShortVarDecl = IdentifierList ":=" ExpressionList .
"var" IdentifierList = ExpressionList .

所以这一行:

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

相当于:

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

如果存在类型,则为每个变量赋予该类型.否则,为每个变量赋予赋值中相应初始化值的类型.

[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}

笔记:

请注意,在复合文字中,不列出所有值是有效的.未明确指定其值的元素将是元素类型的零值.您可以在枚举中的值之前包含可选索引,以指定其值将是其元素的元素.

对于数组和切片文字,以下规则适用:

  • 每个元素都有一个关联的整数索引,标记其在数组中的位置.
  • 带键的元素使用键作为索引; 键必须是常量整数表达式.
  • 没有键的元素使用前一个元素的索引加一个.如果第一个元素没有键,则其索引为零.
0int[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上的所有例子.

有关更多详细信息,请参阅此问题+实际示例: