변수

Variable

Go에서 변수 선언 규칙은 다음과 같다.

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

복잡해 보이지만 하나하나 살펴보면 다음과 같다.

  1. var로 시작한다.
  2. 뒤에는 VarSpec 이나 괄호(parenthesis, ())로 감싼 VarSpec; 이 0개 이상 올 수 있다.
  3. VarSpec은 identifier 하나나 복수의 identifier가 comma(,)로 구분된 IdentifierList이다.
  4. 뒤에는 Type만 오거나 Type 뒤에 equal mark(=)를 쓰고 ExpressionList가 올 수 있다.
  5. 4와 달리 Type이 없이 바로 equal mark(=)를 쓰고 ExpressionList가 올 수도 있다.

말로 풀어 쓰니 더 복잡해 보인다. 아래와 같은 방식들이 가능하다.

var name int
var name int  = 0
var name = 0
var name1, name2 int
var name1, name2 = 0, 1
var ( name1 int; name2 string )
var ( name1 = 0; name2 = "hello" )
var (
	name1, name2 = 0, 1
	name3 string = "hello"
)

마지막 예는 세미콜론이 없어 언뜻 불가능해 보이나 세미콜론 자동 삽입 규칙에 의해 Go lexer가 세미콜론을 삽입하므로 가능하다.

Short variable declarations

변수 선언 뒤 바로 초기값을 입력하는 경우에는 귀찮은 var도 삭제할 수 있다. 이 방식을 short variable declaration 이라 하고 다음과 같이 쓴다.

ShortVarDecl = IdentifierList ":=" ExpressionList .

이름 넣고, equal mark(=) 앞에 colon(:)을 붙인 :=을 입력한 후, 값을 넣으면 된다.

IndentifierList, ExpressionList이기 때문에 당연히 comma(,)로 구분해 복수개를 쓸 수 있다.