짧은 변수 선언
짧은 변수 선언 (Short variable declarations)
변수를 선언할 때마다 var를 쓰는 게 번거로울 때가 있어요. 한 줄로 더 간결하게 값을 담고 싶을 때 주로 쓰는 게 바로 짧은 변수 선언(short variable declaration)이에요. 이 규칙을 알아두면 코드를 훨씬 읽기 쉽게 쓸 수 있죠.
출처: Go Specification
본문
짧은 변수 선언은 다음 문법을 사용해요:
ShortVarDecl = IdentifierList ":=" ExpressionList .
이건 초기화 표현식은 있되 타입을 생략한 일반 변수 선언의 줄임 표기예요. 즉 아래 형태를 짧게 쓴 거죠:
"var" IdentifierList "=" ExpressionList .
실제 사용은 이렇게 돼요:
i, j := 0, 10
f := func() int { return 7 }
ch := make(chan int)
r, w, _ := os.Pipe() // os.Pipe() returns a connected pair of Files and an error, if any
_, y, _ := coord(p) // coord() returns three values; only interested in y coordinate
여기서 재밌는 점이 하나 있어요. 일반 변수 선언과 달리, 짧은 변수 선언은 변수를 **다시 선언(redeclare)**할 수 있죠. 단, 그 변수가 원래 같은 블록 안에서 더 일찍 선언되었고(함수 본문이면 매개변수 목록도 포함해요) 같은 타입이어야 하며, blank가 아닌 변수 중 적어도 하나는 새 변수여야 해요. 그래서 다시 선언은 여러 변수를 한 번에 다루는 짧은 선언에서만 일어날 수 있어요.
다시 선언은 새로운 변수를 만드는 게 아니에요. 그냥 기존 변수에 새 값을 할당할 뿐이죠. 그리고 := 왼쪽에 오는 blank가 아닌 변수 이름은 서로 유일(unique)해야 해요.
field1, offset := nextField(str, 0)
field2, offset := nextField(str, offset) // redeclares offset
x, y, x := 1, 2, 3 // illegal: x repeated on left side of :=
또 하나 기억할 규칙은, 짧은 변수 선언은 함수 안에서만 나타날 수 있다는 거예요. 다만 if, for, switch 문의 초기화 부분 같은 일부 문맥에서는 지역 임시 변수를 선언하는 데 쓸 수 있죠.
더 알아보기
- 변수 선언 (Variable declarations) — 짧은 선언이 줄여 쓰는 원래 형태예요.
- 식별자 목록 (IdentifierList) · 표현식 목록 (ExpressionList) —
:=양쪽의 목록이 어떻게 생겼는지 보고 싶다면요. - 블랭크 식별자 (Blank identifier) — 여러 값 중 일부만 받아 쓸 때
_가 어떤 역할을 하는지 확인할 수 있어요.