2012-11-11 56 views
53

这里发生了什么?左侧没有新变量:=

package main 

import "fmt" 

func main() { 

    myArray :=[...]int{12,14,26} ;  
    fmt.Println(myArray) 

    myArray :=[...]int{11,12,14} //error pointing on this line 

    fmt.Println(myArray) ; 

} 

它抛出,说

no new variables on left side of := 

我在做什么被重新分配给一个已经声明的变量值的误差。

回答

73

从第二条语句中删除colon :,因为您正在为现有变量分配新值。当你进行首次的简短声明,并指派为你在你的第一条语句即myArray :=[...]int{12,14,26}

myArray = [...]int{11,12,14} 

colon :使用。

21

去往:==有两种类型的赋值运算符。它们在语义上是等价的(关于赋值),但第一个也是“短变量声明”(http://golang.org/ref/spec#Short_variable_declarations),这意味着在左边我们至少需要一个新的变量声明才是正确的。

您可以将第二个变化到一个简单的赋值语句:= - >=或者你可以使用一个新的变量,如果这是确定您的算法。

6
myArray :=[...]int{12,14,26} 

如上所述由前评议,:=是一种类型的短手和/或可变声明的短形式的。

所以在上面的陈述中,你正在做两件事情。

  1. 您是声明您的变量myArray的
  2. 你是指定整数数组到myArray变量。

代码的第二部分失败,因为你在这里做:

myArray :=[...]int{11,12,14} //error pointing on this line 

重新声明现有变量myArray的,其中已经包含了整数值。

这工作:

myArray = [...]int{11,12,14} //error pointing on this line 

因为,它是分配整数数组到现有(预先声明/初始化)变量。