在左侧没有新的变量:=(no new variables on left side of :=)

2019-07-03 17:36发布

这里发生了什么事?

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

我在做什么被重新分配值已声明的变量。

Answer 1:

删除colon :为你分配一个新的价值,存在的变量从第二条语句。

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

colon :当你进行首次的简短声明,并指派为你在你的第一条语句做即用myArray :=[...]int{12,14,26}



Answer 2:

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

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



Answer 3:

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

如由先前的评论者指出, :=是一种类型的短手和/或变量声明的短形式的。

因此,在你上面的statment正在做两件事情。

  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

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



Answer 4:

作为一个侧面说明, 重新声明只能出现在一个多变量简短声明

从语言规范引用:

不同于常规的变量声明,短变量声明可以重新声明变量提供他们最初早些时候在与同类型同一个块中声明,以及非空的变量中的至少一个是新的。 因此,重新声明只能出现在一个多变量简短声明。 重声明不引入新的变量; 它只是分配一个新的值到原来的。

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



文章来源: no new variables on left side of :=