2017-11-17 9 views
0

저는 새로 가서 go tool tour을 사용하고 있습니다.암시 적으로 작동하는 동안 Go 변수 선언에 명시 적으로 유형을 제공하지 않습니다.

짧은 변수 선언 섹션에서 섹션에있는 동안 샘플 코드를 다음과 같이 수정했습니다. 나는 다음과 같은 var 선언에서 유형을 제거하는 경우, 그러나

# command-line-arguments 
./compile233.go:8:12: syntax error: unexpected comma at end of statement 

: 그러나

package main 

import "fmt" 

func main() { 
    var i, j int = 1, 2 
    k := 3 
    var c bool, python string = true, "test" 

    fmt.Println(i, j, k, c, python) 
} 

, 나는 위의 코드를 실행, 나는 오류가

package main 

import "fmt" 

func main() { 
    var i, j int = 1, 2 
    k := 3 
    var c, python = true, "test" 

    fmt.Println(i, j, k, c, python) 
} 

그것은 작동합니다.

첫 번째 예에서 무엇이 잘못되었는지를 알 수 없으며 오류가 저를 오도하는 것 같습니다. 아무도 내가 잘못한 것을 설명 할 수 있었고 왜 오류가 발생 했습니까?

답변

2

변수 선언 문은 단일 문에 명시 적으로 지정된 유형의 여러 변수를 선언 할 경우 모두 동일한 유형이 있어야합니다 것을 의미한다

VarDecl  = "var" (VarSpec | "(" { VarSpec ";" } ")") . 
VarSpec  = IdentifierList (Type [ "=" ExpressionList ] | "=" ExpressionList) . 

으로 정의된다. 그리고 그 유형은 식별자 목록 뒤에 와야합니다.

그래서

var foo, bar bool // is valid 
var foo bool, bar bool // is not (only one type qualifier is allowed) 

참조 : 유형이 언급되지 않은 경우에도 때문에, 비록 암시 적 작업을 수행하는 방법

+0

, 그것은 여전히 ​​하나에서 여러 유형입니다 선언? –

+0

@AyushGupta 구문이 허용하기 때문에 작동합니다. "하나의 선언에 여러 유형이 있습니다."--- 괜찮습니다. 허용되는 형식 한정자는 하나뿐입니다. – zerkms