Keine neuen Variablen auf der linken Seite von: =

104

Was passiert hier?

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

}

Es wird ein Fehler ausgegeben, der besagt

no new variables on left side of :=

Ich habe einer bereits deklarierten Variablen erneut Werte zugewiesen.

Runen
quelle
versuchen SiemyArray,x = [...]int{11,12,14},3
Herr Lou

Antworten:

138

Entfernen Sie die colon :aus der zweiten Anweisung, wenn Sie einer vorhandenen Variablen einen neuen Wert zuweisen.

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

colon :wird verwendet, wenn Sie die kurze Deklaration und Zuweisung zum ersten Mal ausführen, wie Sie es in Ihrer ersten Anweisung tun, d myArray :=[...]int{12,14,26}. h .

Yogendra Singh
quelle
26

Es gibt zwei Arten von Zuweisungsoperatoren in go :=und =. Sie sind semantisch äquivalent (in Bezug auf die Zuweisung), aber die erste ist auch eine "kurze Variablendeklaration" ( http://golang.org/ref/spec#Short_variable_declarations ), was bedeutet, dass wir links mindestens eine haben müssen neue Variablendeklaration für die Richtigkeit.

Sie können die zweite in eine einfache Zuweisungsanweisung ändern :=-> =oder Sie können eine neue Variable verwenden, wenn dies mit Ihrem Algorithmus in Ordnung ist.

Mihai Toader
quelle
Und :=kann nicht mit verwendet werden _? zB_ := someFunc()
stt106
7

Als Randnotiz kann die Neudeklaration nur in einer Kurzdeklaration mit mehreren Variablen erscheinen

Zitat aus der Sprachspezifikation:

Im Gegensatz zu regulären Variablendeklarationen kann eine kurze Variablendeklaration Variablen neu deklarieren, sofern sie ursprünglich früher im selben Block mit demselben Typ deklariert wurden und mindestens eine der nicht leeren Variablen neu ist. Infolgedessen kann eine erneute Deklaration nur in einer Kurzdeklaration mit mehreren Variablen angezeigt werden. Durch die erneute Deklaration wird keine neue Variable eingeführt. Es wird dem Original lediglich ein neuer Wert zugewiesen.

package main

import "fmt"


func main() {
    a, b := 1, 2
    c, b := 3, 4

    fmt.Println(a, b, c)
}

Hier ist ein sehr gutes Beispiel für die erneute Deklaration von Variablen in Golang: https://stackoverflow.com/a/27919847/4418897

Santosh Pillai
quelle
Danke für den Hinweis. Ich habe durch eine Kurzdeklaration mit mehreren Variablen verwirrt, dies erklärt warum.
Li Jinyao
7
myArray  :=[...]int{12,14,26}

Wie von den vorherigen commen angegeben, :=ist eine Art von Kurz Hand und / oder der Kurzform der variablen Erklärung .

In der obigen Aussage machen Sie also zwei Dinge.

  1. Sie deklarieren Ihre Variable als myArray .
  2. Sie Zuweisen eines Arrays von ganzen Zahlen der myArray Variable.

Der zweite Teil Ihres Codes schlägt fehl, weil Sie hier Folgendes tun:

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

Deklariert die vorhandene Variable myArray erneut, die bereits ganzzahlige Werte enthält.

Das funktioniert:

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

Weil es das Integer-Array der vorhandenen (vordeklarierten / initialisierten) Variablen zuweist .

RobEdouard
quelle