2012-11-11 20 views
53

Co się tutaj dzieje?brak nowych zmiennych po lewej stronie: =

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

} 

To wygeneruje błąd, który mówi

no new variables on left side of := 

Co robiłem ponownie przypisanie wartości do zmiennej zadeklarowanej już.

Odpowiedz

73

Usuń colon : z drugiej instrukcji, przypisując nową wartość do istniejącej zmiennej.

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

colon : jest używana podczas wykonywania krótkie oświadczenie i przypisanie po raz pierwszy, jak robisz w swoim pierwszym oświadczeniu tj myArray :=[...]int{12,14,26}.

21

Dostępne są dwa typy operatorów przypisania: := i =. Są one semantycznie równoważne (w odniesieniu do przypisania), ale pierwsza to także "krótka deklaracja zmiennych" (http://golang.org/ref/spec#Short_variable_declarations), co oznacza, że ​​po lewej stronie musimy mieć co najmniej nową deklarację zmiennej, aby była poprawna.

Możesz zmienić drugi z prostego oświadczenia przypisania := ->= lub możesz użyć nowej zmiennej, jeśli jest to w porządku z twoim algorytmem.

6
myArray :=[...]int{12,14,26} 

Jak stwierdzono w poprzednich komentujących, := to rodzaj krótkiej ręki i/lub krótkiej postaci zmiennej deklaracji.

Tak więc w powyższej instrukcji robisz dwie rzeczy.

  1. Jesteś deklarując zmienną być myArray.
  2. Jesteś przydzielając tablicę liczb całkowitych do zmiennej myArray.

Druga część kodu nie powiedzie się, ponieważ to, co robisz tutaj:

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

Czy RE-deklarowania zmiennej myArray istniejący, która zawiera już wartości całkowite.

Działa:

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

Ponieważ jest przypisanie tablicy całkowitą do istniejącej zmiennej (predeklarowane/zainicjowany).

Powiązane problemy