GO显式数组初始化

时间:2016-08-05 07:10:30

标签: arrays go initialization variable-assignment declaration

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

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

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

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

Spec: Variable declaration:

  

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

所以你可以使用以下任何一个,都声明并初始化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。您可以在枚举中的值之前包含可选索引,以指定其值为的元素。

Spec: Composite literals:

  

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

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

由于您的初始数组包含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