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.
Retirer le colon :
de la deuxième instruction lorsque vous affectez une nouvelle valeur à une variable existante.
myArray = [...]int{11,12,14}
colon :
est utilisé lorsque vous effectuez la déclaration et l’affectation courtes pour la première fois, comme vous le faites dans votre première instruction, c.-à-d. myArray :=[...]int{12,14,26}
.
Il existe deux types d'opérateurs d'affectation dans go :=
et =
. Elles sont sémantiquement équivalentes (en ce qui concerne l’affectation), mais la première est également une "déclaration de variable courte" ( http://golang.org/ref/spec#Short_variable_declarations ), ce qui signifie que la gauche il faut au moins une nouvelle déclaration de variable pour que cela soit correct.
Vous pouvez changer la seconde en une simple instruction d'affectation :=
-> =
ou vous pouvez utiliser une nouvelle variable si votre algorithme vous convient.
myArray :=[...]int{12,14,26}
Comme l’ont indiqué les précédents intervenants, :=
est un type de raccourci et/ou la forme abrégée de variable déclaration.
Ainsi, dans la déclaration ci-dessus, vous faites deux choses.
La deuxième partie de votre code échoue, car ce que vous faites ici:
myArray :=[...]int{11,12,14} //error pointing on this line
Est-ce que je re-déclare la variable existante myArray, qui contient déjà des valeurs entières.
Cela marche:
myArray = [...]int{11,12,14} //error pointing on this line
Parce que c'est assigning le tableau entier de la variable existante (pré-déclarée/initialisée).
En remarque, la redéclaration ne peut apparaître que dans une déclaration courte à variables multiples
Citant la spécification de langue:
Contrairement aux déclarations de variables régulières, une déclaration de variable courte peut redéclarer des variables à condition qu'elles aient été déclarées précédemment dans le même bloc avec le même type et qu'au moins une des variables non vides soit nouvelle. En conséquence, la redéclaration ne peut apparaître que dans une déclaration courte à variables multiples. La redéclaration n'introduit pas une nouvelle variable; il attribue simplement une nouvelle valeur à l'original.
package main
import "fmt"
func main() {
a, b := 1, 2
c, b := 3, 4
fmt.Println(a, b, c)
}
Voici un très bon exemple de redéclaration de variables dans golang: https://stackoverflow.com/a/27919847/4418897