Qu'est-ce qu'il se passe ici?
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) ;
}
Il jette une erreur qui dit
no new variables on left side of :=
Ce que je faisais était de réaffecter des valeurs à une variable déjà déclarée.
variables
go
colon-equals
Runes
la source
la source
myArray,x = [...]int{11,12,14},3
Réponses:
Supprimez le
colon :
de la deuxième instruction lorsque vous affectez une nouvelle valeur à une variable existante.colon :
est utilisé lorsque vous effectuez la déclaration courte et la cession pour la première fois comme vous le faites dans votre première déclaration, c'est-à-diremyArray :=[...]int{12,14,26}
.la source
Il existe deux types d'opérateurs d'affectation dans go
:=
et=
. Ils sont sémantiquement équivalents (en ce qui concerne l'affectation) mais le premier est aussi une "déclaration de variable courte" ( http://golang.org/ref/spec#Short_variable_declarations ) ce qui signifie que dans la gauche, nous devons avoir au moins un nouvelle déclaration de variable pour qu'elle soit correcte.Vous pouvez changer la seconde en une simple instruction d'affectation
:=
->=
ou vous pouvez utiliser une nouvelle variable si cela convient à votre algorithme.la source
:=
ne peut pas être utilisé avec_
? eg_ := someFunc()
En remarque, la redéclaration ne peut apparaître que dans une déclaration courte à plusieurs variables
Citant la spécification de la langue:
Voici un très bon exemple de redéclaration de variables dans golang: https://stackoverflow.com/a/27919847/4418897
la source
Comme indiqué par les commentateurs précédents,
:=
est un type de déclaration abrégée et / ou abrégée de variable .Donc, dans la déclaration ci-dessus, vous faites deux choses.
La deuxième partie de votre code échoue, car ce que vous faites ici:
Est-ce que RE-déclare la variable existante myArray, qui contient déjà des valeurs entières.
Cela marche:
Parce qu'il attribue le tableau d'entiers à la variable existante (pré-déclarée / initialisée).
la source