여기서 무슨 일이 일어나고 있습니까?
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 :=
내가 한 일은 이미 선언 된 변수에 값을 다시 할당하는 것입니다.
답변
colon :
기존 변수에 새 값을 할당 할 때 두 번째 문에서를 제거합니다 .
myArray = [...]int{11,12,14}
colon :
첫 번째 명령문에서 수행하는 것처럼 처음으로 짧은 선언 및 할당을 수행 할 때 사용됩니다 myArray :=[...]int{12,14,26}
.
답변
go :=
및 에는 두 가지 유형의 할당 연산자가 =
있습니다. 그것들은 (할당과 관련하여) 의미 론적으로 동일하지만 첫 번째는 “짧은 변수 선언”( http://golang.org/ref/spec#Short_variable_declarations ) 이기도합니다. 즉 , 왼쪽에는 적어도 하나의 그것이 정확하도록 새로운 변수 선언.
두 번째를 간단한 대 입문으로 변경 하거나 :=
-> =
알고리즘에 문제가없는 경우 새 변수를 사용할 수 있습니다.
답변
참고로 재 선언은 다중 변수 짧은 선언에만 나타날 수 있습니다.
언어 사양에서 인용 :
일반 변수 선언과 달리, 짧은 변수 선언은 원래 동일한 유형의 동일한 블록에서 이전에 선언되었고 공백이 아닌 변수 중 하나 이상이 새로운 변수 인 경우 변수를 다시 선언 할 수 있습니다. 결과적으로 재 선언은 다중 변수 짧은 선언에만 나타날 수 있습니다. 재 선언은 새 변수를 도입하지 않습니다. 원본에 새 값을 할당 할뿐입니다.
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
답변
myArray :=[...]int{12,14,26}
이전 주석가가 언급했듯이, :=
는 축약 형 및 / 또는 약식 변수 선언 형식입니다 .
그래서 위의 문장에서 당신은 두 가지 일을하고 있습니다.
- 변수를 myArray 로 선언 하고 있습니다 .
- 당신이하는 할당 받는 정수의 배열 에서 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
왜냐하면 기존 (미리 선언 된 / 초기화 된) 변수에 정수 배열을 할당 하기 때문입니다 .