GO中是否存在显式数组初始化(声明和赋值)或唯一的方法是使用速记运算符? 这是一个实际的例子 - 这两个是平等的:
a := [3]int{1, 0, 1}
var a [3]int = [3]int{1, 0, 1}
答案 0 :(得分:7)
它们是等价的。一般来说:Spec: Short variable declaration:
短变量声明使用语法:
"var" IdentifierList = ExpressionList .
它是具有初始化表达式的常规variable declaration的简写,但没有类型:
a := [3]int{369, 0, 963}
所以这一行:
var a = [3]int{369, 0, 963}
等同于:
[3]int
但由于表达式列表是var a [3]int = [3]int{369, 0, 963}
类型的composite literal,因此以下内容相同:
[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}
类型的变量:
0
备注:强>
请注意,在复合文字中,不列出所有值是有效的。未明确指定其值的元素将是元素类型的zero value。您可以在枚举中的值之前包含可选索引,以指定其值为的元素。
对于数组和切片文字,以下规则适用:
- 每个元素都有一个关联的整数索引,用于标记其在数组中的位置。
- 带键的元素使用键作为索引;键必须是一个常量整数表达式。
- 没有键的元素使用前一个元素的索引加一。如果第一个元素没有键,则其索引为零。
由于您的初始数组包含int
,它是元素类型[3]int{369, 0, 963}
的零值,因此您可以将其从文字中排除。要创建值并将其初始化为值// Value at index 1 implicitly gets 0:
g := [3]int{369, 2: 963}
h := [...]int{369, 2: 963}
,您也可以这样做:
<dependency>
<groupId>org.eclipse.jetty.aggregate</groupId>
<artifactId>jetty-all</artifactId>
<version>9.3.8.v20160314</version>
<type>pom</type>
</dependency>
尝试Go Playground上的所有示例。
有关详细信息和实际示例,请参阅此问题: Keyed items in golang array initialization