Подтвердить что ты не робот

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 :=

То, что я делал, было перераспределение значений уже объявленной переменной.

4b9b3361

Ответ 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

Потому что присваивает целочисленный массив существующей (предварительно объявленной/инициализированной) переменной.