web-dev-qa-db-fra.com

pas de nouvelles variables à gauche de: =

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.

86
Runes

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}.

114
Yogendra Singh

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.

26
Mihai Toader
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.

  1. Vous êtes déclarant votre variable doit être myArray.
  2. Vous êtes attribution un tableau d'entiers à la variable myArray.

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).

6
RobEdouard

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

4
Santosh Pillai