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.
variables
go
colon-equals
Runen
quelle
quelle
myArray,x = [...]int{11,12,14},3
Antworten:
Entfernen Sie die
colon :
aus der zweiten Anweisung, wenn Sie einer vorhandenen Variablen einen neuen Wert zuweisen.colon :
wird verwendet, wenn Sie die kurze Deklaration und Zuweisung zum ersten Mal ausführen, wie Sie es in Ihrer ersten Anweisung tun, dmyArray :=[...]int{12,14,26}
. h .quelle
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.quelle
:=
kann nicht mit verwendet werden_
? zB_ := someFunc()
Als Randnotiz kann die Neudeklaration nur in einer Kurzdeklaration mit mehreren Variablen erscheinen
Zitat aus der Sprachspezifikation:
Hier ist ein sehr gutes Beispiel für die erneute Deklaration von Variablen in Golang: https://stackoverflow.com/a/27919847/4418897
quelle
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.
Der zweite Teil Ihres Codes schlägt fehl, weil Sie hier Folgendes tun:
Deklariert die vorhandene Variable myArray erneut, die bereits ganzzahlige Werte enthält.
Das funktioniert:
Weil es das Integer-Array der vorhandenen (vordeklarierten / initialisierten) Variablen zuweist .
quelle