在GO中是否有显式的数组初始化(声明和赋值)方式,或者唯一的方法是使用简写运算符?
这里有一个实际的例子 - 这两个是否相等:
a := [3]int{1, 0, 1}
var a [3]int = [3]int{1, 0, 1}
a := [3]int{1, 0, 1}
var a [3]int = [3]int{1, 0, 1}
它们是等价的。一般而言:规范:短变量声明:
短变量声明 使用如下语法:
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}
注意:
在复合字面量中,不列出所有值是有效的。未显式指定值的元素将成为该元素类型的零值。您可以在值枚举中在值之前包括可选索引,以指定其值将是哪个元素的值。
对于数组和切片字面量,应用以下规则:
- 每个元素都有一个关联的整数索引来标记其在数组中的位置。
- 具有键的元素使用该键作为其索引;键必须是常量整数表达式。
- 没有键的元素使用上一个元素的索引加一。如果第一个元素没有键,则其索引为零。
由于您的初始数组包含了元素类型int
的零值 0
,因此您可以将其从字面量中排除。要创建并初始化一个变量为值[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上尝试所有示例。
有关更多详细信息和实用示例,请参见此问题:Golang数组初始化中的键控项
numStacks
是一个大于0
的常量,那么这将有效。如果你想让所有元素初始化为-1
,请参见 Is there analog of memset in go?。 - iczanumstacks
是一个常量... 数组大小必须是常量。如果你在编译时不知道它,请使用切片代替数组。 - icza