Что тут происходит?
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 :=
То, что я делал, - это переназначение значений уже объявленной переменной.
variables
go
colon-equals
Руны
источник
источник
myArray,x = [...]int{11,12,14},3
Ответы:
Удалите
colon :
из второго оператора, поскольку вы присваиваете новое значение существующей переменной.colon :
используется при выполнении короткой декларации и назначение в первый раз , как вы делаете в своем первом , т.е. заявлениеmyArray :=[...]int{12,14,26}
.источник
В go
:=
и есть два типа операторов присваивания=
. Они семантически эквивалентны (в отношении присваивания), но первый также является «кратким объявлением переменной» ( http://golang.org/ref/spec#Short_variable_declarations ), что означает, что слева нам нужно иметь как минимум новое объявление переменной, чтобы оно было правильным.Вы можете изменить вторую на простой оператор присваивания
:=
->=
или использовать новую переменную, если это подходит вашему алгоритму.источник
:=
нельзя использовать с_
? eg_ := someFunc()
В качестве примечания, повторное объявление может появиться только в кратком объявлении с несколькими переменными.
Цитата из спецификации языка:
Вот очень хороший пример повторного объявления переменных в голанге: https://stackoverflow.com/a/27919847/4418897
источник
Как указывалось предыдущими комментаторами,
:=
это вид сокращенного и / или сокращенного объявления переменной .Итак, в приведенном выше статусе вы делаете две вещи.
Вторая часть вашего кода не работает, потому что то, что вы здесь делаете:
Повторно объявляет существующую переменную myArray, которая уже содержит целочисленные значения.
Это работает:
Потому что он присваивает целочисленный массив существующей (предварительно объявленной / инициализированной) переменной.
источник