左侧没有新变量:=



这里发生了什么?

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

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

从第二个语句中删除colon :,因为您将新值分配给现有变量。

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

colon :在您第一次执行简短的声明和分配时使用了第一个语句,即myArray :=[...]int{12,14,26}

GO :==中有两种分配运算符。它们在语义上是等效的(相对于分配),但第一个也是"简短变量声明"(http://golang.org/ref/ref/spec#short_variable_declarations)新的变量声明是正确的。

您可以将第二个更改为简单的分配语句:=-> =,也可以使用新变量,如果您的算法还可以。

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

引用语言规范:

与常规变量声明不同,一个简短的变量声明可以 重新列出变量,只要它们最初是早些时候宣布的 具有相同类型的相同块,至少一个非空白 变量是新的。结果,重新支配只能出现 多变量的简短声明。重新支配不引入 新变量;它只是将新值分配给原始值。

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

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

正如先前的评论者所述, := 是一种短手和/或变量声明的短形类型。

因此,在上面的陈述中,您正在做两件事。

  1. 您是声明您的变量为 myArray
  2. 您是分配整数数组 myArray variable。

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

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

正在重新启动现有变量myarray,它已经包含整数值。

这有效:

myArray = [...]int{11,12,14} // NO error will be produced by this line

因为,它是分配整数数组到现有的(预指定/初始化)变量。

最新更新