Golang: никаких новых переменных на левой стороне: =
Что здесь происходит?
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) ;
}
Он выдает сообщение об ошибке
no new variables on left side of :=
То, что я делал, было перераспределение значений уже объявленной переменной.
Ответы
Ответ 1
Удалите colon :
из второго оператора, поскольку вы назначаете новое значение существующей переменной.
myArray = [...]int{11,12,14}
colon :
используется, когда вы выполняете краткое объявление и присваивание в первый раз, как вы делаете в своем первом утверждении, т.е. myArray :=[...]int{12,14,26}
.
Ответ 2
Существует два типа операторов присваивания в go :=
и =
. Они семантически эквивалентны (по отношению к присваиванию), но первая также является "короткой декларацией переменной" (http://golang.org/ref/spec#Short_variable_declarations), что означает, что слева мы должны имеют хотя бы новое объявление переменной, чтобы оно было правильным.
Вы можете изменить второй на простой оператор присваивания :=
→ =
или вы можете использовать новую переменную, если это нормально с вашим алгоритмом.
Ответ 3
myArray :=[...]int{12,14,26}
Как указано предыдущими комментаторами, :=
является типом короткой и/или короткой формы переменной .
Итак, в статуте выше вы делаете две вещи.
- Вы объявляете свою переменную myArray.
- Вы присваиваете массив целых чисел переменной myArray.
Вторая часть вашего кода выходит из строя, потому что вы здесь:
myArray :=[...]int{11,12,14} //error pointing on this line
Является RE-объявлением переменной существующей myArray, которая уже содержит целочисленные значения.
Это работает:
myArray = [...]int{11,12,14} //error pointing on this line
Потому что присваивает целочисленный массив существующей (предварительно объявленной/инициализированной) переменной.