左侧没有新变量:=

时间:2012-11-11 06:42:08

标签: variables go colon-equals

这里发生了什么?

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 :=

我正在做的是将值重新分配给已声明的变量。

4 个答案:

答案 0 :(得分:111)

在为现有变量分配新值时,从第二个语句中删除colon :

myArray = [...]int{11,12,14}
第一次执行简短声明和作业时使用

colon :,就像您在第一个声明中所做的那样myArray :=[...]int{12,14,26}

答案 1 :(得分:25)

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

您可以将第二个更改为简单的作业声明:= - > =或者您可以使用新变量,如果您的算法没问题。

答案 2 :(得分:6)

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

如前评论者所述, := 是一种简短形式和/或简短形式的变量声明

所以在上面的陈述中你做了两件事。

  1. 声明您的变量 myArray
  2. myArray 变量分配整数数组。
  3. 代码的第二部分失败了,因为你在这里做的是:

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

    重新声明现有变量myArray,它已包含整数值。

    这有效:

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

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

答案 3 :(得分:3)

作为旁注,重新声明只能出现在多变量简短声明中

引用语言规范:

  

与常规变量声明不同,短变量声明可以   重新声明变量,只要它们最初是在早些时候宣布的   具有相同类型的相同块,以及至少一个非空白块   变量是新的。因此,重新声明只能出现在   多变量简短声明。重新申报不会引入   新变量;它只是为原始版本赋予了一个新值。

package main

import "fmt"


func main() {
    a, b := 1, 2
    c, b := 3, 4

    fmt.Println(a, b, c)
}

这是一个关于golang中重新声明变量的非常好的例子: https://stackoverflow.com/a/27919847/4418897