Co tu się dzieje?
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) ;
}
Wyświetla błąd, który mówi
no new variables on left side of :=
To, co robiłem, to ponowne przypisywanie wartości do już zadeklarowanej zmiennej.
variables
go
colon-equals
Runy
źródło
źródło
myArray,x = [...]int{11,12,14},3
Odpowiedzi:
Usuń
colon :
z drugiej instrukcji, gdy przypisujesz nową wartość do istniejącej zmiennej.colon :
jest używany, gdy wykonujesz krótką deklarację i przypisanie po raz pierwszy, tak jak robisz to w pierwszej instrukcji, tjmyArray :=[...]int{12,14,26}
.źródło
Istnieją dwa typy operatorów przypisania w go
:=
i=
. Są semantycznie równoważne (w odniesieniu do przypisania), ale pierwsza z nich to także „krótka deklaracja zmiennej” ( http://golang.org/ref/spec#Short_variable_declarations ), co oznacza, że po lewej stronie musimy mieć co najmniej nowa deklaracja zmiennej, aby była poprawna.Możesz zmienić drugą na prostą instrukcję przypisania
:=
->=
lub możesz użyć nowej zmiennej, jeśli jest to w porządku z twoim algorytmem.źródło
:=
nie można go używać z_
? np._ := someFunc()
Na marginesie, ponowna deklaracja może pojawić się tylko w krótkiej deklaracji zawierającej wiele zmiennych
Cytat ze specyfikacji języka:
Oto bardzo dobry przykład dotyczący ponownej deklaracji zmiennych w golang: https://stackoverflow.com/a/27919847/4418897
źródło
Jak stwierdzili poprzedni komentatorzy,
:=
jest to rodzaj short-hand i / lub short-form deklaracji zmiennej .Zatem w powyższym zdaniu robisz dwie rzeczy.
Druga część twojego kodu zawodzi, ponieważ to, co tutaj robisz:
Czy RE deklaruje istniejącą zmienną myArray, która już zawiera wartości całkowite.
To działa:
Ponieważ przypisuje tablicę liczb całkowitych do istniejącej (wstępnie zadeklarowanej / zainicjowanej) zmiennej.
źródło