128 votes

aucune nouvelle variable du côté gauche de :=

Qu'est-ce qui 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 y a une erreur qui dit

no new variables on left side of :=

Ce que je faisais, c'était réaffecter des valeurs à une variable déjà déclarée.

170voto

Yogendra Singh Points 19406

Retirer le colon : de la deuxième déclaration car vous attribuez une nouvelle valeur à une variable existante.

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

colon : est utilisé lorsque vous effectuez la déclaration courte et l'affectation pour la première fois, comme vous le faites dans votre première déclaration, à savoir myArray :=[...]int{12,14,26} .

31voto

Il existe deux types d'opérateurs d'affectation en go := y = . 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 qu'à gauche, nous devons avoir au moins une nouvelle déclaration de variable pour que ce soit correct.

Vous pouvez remplacer la seconde par une simple instruction d'affectation. := -> = ou vous pouvez utiliser une nouvelle variable si cela convient à votre algorithme.

11voto

Santosh Pillai Points 2584

En passant, la redéclaration ne peut apparaître que dans une déclaration courte multi-variable

Citation de la spécification du langage :

Contrairement aux déclarations de variables ordinaires, une déclaration de variable courte peut redéclarer des variables à condition qu'elles aient été déclarées précédemment dans le 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 multi-variable. La redéclaration n'introduit pas une nouvelle variable ; elle attribue simplement une nouvelle valeur à la variable originale.

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 en golang : https://stackoverflow.com/a/27919847/4418897

8voto

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

Comme indiqué par les précédents commentateurs, := est un type d'abréviation et/ou la forme courte de la variable déclaration .

Ainsi, dans la déclaration ci-dessus, vous faites deux choses.

  1. Vous êtes en déclarant votre variable doit être monRéseau .
  2. Vous êtes assignation de un tableau d'entiers à la monRéseau variable.

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 RE-déclarer le existant variable monTableau, qui contient déjà des valeurs entières.

Ça marche :

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

Parce que, c'est assignation de le tableau d'entiers à la variable existante (pré-déclarée / initialisée).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X