사전 선언된 식별자

사전 선언된 식별자

코드를 보다 보면 intstring, nil 같은 이름은 어디서도 선언한 적이 없는데 그냥 쓸 수 있죠? 그건 Go가 언어를 시작할 때부터 이 이름들을 미리 선언해 두기 때문이에요. 어떤 이름들이 사전 선언되어 있는지, 정확히 짚고 넘어갈게요.

출처: Go Specification

본문

다음 식별자들은 유니버스 블록(Blocks)에 암묵적으로 선언되어 있어요. Go 1.18과 Go 1.21에서 그 목록이 일부 갱신되었답니다 Go 1.18 Go 1.21:

Types:
	any bool byte comparable
	complex64 complex128 error float32 float64
	int int8 int16 int32 int64 rune string
	uint uint8 uint16 uint32 uint64 uintptr

Constants:
	true false iota

Zero value:
	nil

Functions:
	append cap clear close complex copy delete imag len
	make max min new panic print println real recover

이 목록을 보면 크게 네 부류로 나뉘는 걸 알 수 있어요. **타입(Types)**에는 intstring처럼 데이터를 나타내는 기본 타입들이, **상수(Constants)**에는 true/false/iota 같은 상수가 있죠. **제로 값(Zero value)**은 값이 하나뿐이라 바로 nil이에요. 그리고 **함수(Functions)**에는 appendmake, len처럼 범용적으로 쓰는 내장 함수들이 들어 있어요.

여기 신경 쓸 포인트가 하나 있어요. 비록 유니버스 블록에 선언되어 있긴 하지만, 이 이름들도 평범한 식별자처럼 다른 블록에서 재선언하면 가릴 수 있어요(shadowing). 그러니까 지금 이 목록을 달달 외우기보다는, "이름이 충돌하면 내 코드의 선언이 우선한다"는 규칙을 먼저 가져가면 좋아요.

더 알아보기