: = 왼쪽에 새 변수가 없습니다.


104

여기서 무슨 일이 일어나고 있습니까?

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

내가 한 일은 이미 선언 된 변수에 값을 다시 할당하는 것입니다.


시도myArray,x = [...]int{11,12,14},3
미스터 루에게

답변:


138

colon :기존 변수에 새 값을 할당 할 때 두 번째 문에서를 제거합니다 .

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

colon :첫 번째 명령문에서 수행하는 것처럼 처음으로 짧은 선언 및 할당을 수행 할 때 사용됩니다 myArray :=[...]int{12,14,26}.


26

go :=및 에는 두 가지 유형의 할당 연산자가 =있습니다. 그것들은 (할당과 관련하여) 의미 론적으로 동일하지만 첫 번째는 "짧은 변수 선언"( http://golang.org/ref/spec#Short_variable_declarations ) 이기도합니다. 즉 , 왼쪽에는 적어도 하나의 그것이 정확하도록 새로운 변수 선언.

두 번째를 간단한 대 입문으로 변경 하거나 :=-> =알고리즘에 문제가없는 경우 새 변수를 사용할 수 있습니다.


:=함께 사용할 수 _없습니까? 예를 들면_ := someFunc()
stt106

7

참고로 재 선언은 다중 변수 짧은 선언에만 나타날 수 있습니다.

언어 사양에서 인용 :

일반 변수 선언과 달리, 짧은 변수 선언은 원래 동일한 유형의 동일한 블록에서 이전에 선언되었고 공백이 아닌 변수 중 하나 이상이 새로운 변수 인 경우 변수를 다시 선언 할 수 있습니다. 결과적으로 재 선언은 다중 변수 짧은 선언에만 나타날 수 있습니다. 재 선언은 새 변수를 도입하지 않습니다. 원본에 새 값을 할당 할뿐입니다.

package main

import "fmt"


func main() {
    a, b := 1, 2
    c, b := 3, 4

    fmt.Println(a, b, c)
}

다음은 golang의 변수 재 선언에 대한 아주 좋은 예입니다 : https://stackoverflow.com/a/27919847/4418897


메모 감사합니다. 다중 변수 짧은 선언으로 혼란 스러웠습니다. 이것이 그 이유를 설명합니다.
Li Jinyao

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

이전 주석가가 언급했듯이, :=는 축약 형 및 / 또는 약식 변수 선언 형식입니다 .

그래서 위의 문장에서 당신은 두 가지 일을하고 있습니다.

  1. 변수를 myArray선언 하고 있습니다 .
  2. 당신이하는 할당 받는 정수의 배열 에서 myArray 변수를.

코드의 두 번째 부분은 실패합니다.

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

이미 정수 값을 포함 하는 기존 변수 myArray를 다시 선언 합니다.

이것은 작동합니다 :

myArray = [...]int{11,12,14} // NO error will be produced by this line

왜냐하면 기존 (미리 선언 된 / 초기화 된) 변수에 정수 배열을 할당 하기 때문입니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.