GO显式数组初始化

Use*_*789 5 arrays initialization declaration variable-assignment go

GO中是否存在显式数组初始化(声明和赋值),或者唯一的方法是使用速记运算符?这是一个实际的例子 - 这两个是平等的:

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

var a [3]int = [3]int{1, 0, 1}
Run Code Online (Sandbox Code Playgroud)

icz*_*cza 8

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

一个短变量声明使用语法:

ShortVarDecl = IdentifierList ":=" ExpressionList .
Run Code Online (Sandbox Code Playgroud)

它是具有初始化表达式的常规变量声明的简写,但没有类型:

"var" IdentifierList = ExpressionList .
Run Code Online (Sandbox Code Playgroud)

所以这一行:

a := [3]int{369, 0, 963}
Run Code Online (Sandbox Code Playgroud)

相当于:

var a = [3]int{369, 0, 963}
Run Code Online (Sandbox Code Playgroud)

但由于表达式列表是类型的复合文字[3]int,因此以下内容相同:

var a [3]int = [3]int{369, 0, 963}
Run Code Online (Sandbox Code Playgroud)

规格:变量声明:

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

所以你可以使用以下任何一个,都声明并初始化一个类型的变量[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}
Run Code Online (Sandbox Code Playgroud)

笔记:

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

规格:复合文字:

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

  • 每个元素都有一个关联的整数索引,标记其在数组中的位置.
  • 带键的元素使用键作为索引; 键必须是常量整数表达式.
  • 没有键的元素使用前一个元素的索引加一个.如果第一个元素没有键,则其索引为零.

由于您的初始数组包含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} 
Run Code Online (Sandbox Code Playgroud)

试试Go Playground上的所有例子.

有关更多详细信息,请参阅此问题+实际示例:golang数组初始化中的键控项