상수

Constant

상수를 선언하는 방법은 var 대신 const를 사용한다는 점을 제외하면 변수를 선언하는 방법과 유사하다.

ConstDecl  = "const" ( ConstSpec | "(" { ConstSpec ";" } ")" ) .
ConstSpec  = IdentifierList [ [ Type ] "=" ExpressionList ] .

단, 여느 다른 언어에서와 마찬가지로 선언 후 나중에 값을 할당하는 것은 불가능하다. 즉, 선언과 함께 값을 할당해야 한다. 또, 상수라는 것을 명확히 해야하기 때문에 :=를 사용하는 것도 당연히 불가능하다.

const Pi32 float32 = 3.14
const Pi = 3.14
const (
	Zero = 0
	One = 1
	Two = 2
)

iota

위의 마지막 예는 enum과 유사해 보인다.

enum {
	Zero = 0,
	One = 1,
	Two = 2
};

그런데 C의 enum은 초기값만 정해주면 알아서 증가한다.

enum {
	Zero = 0,
	One,	/* One == 1 */
	Two		/* Two == 2 */
};

Go에서 이 역할을 하는 키워드—사실 키워드가 아니라 predefined identifier의 일종; 참고—가 바로 iota이다.

atoi를 뒤집어 놓은 것처럼 생겼다.

itoa가 아니다.

이오타, 아이오타, 그리스 알파벳 9번째 글자, i처럼 생긴, 바로 그거다.

iota를 사용해 위 마지막 예는 다음과 같이 쓸 수 있다.

const (
	Zero = iota
	One = iota
	Two = iota
)

iota는 0부터 시작해 호출할 때마다 1씩 증가한다. 이것도 귀찮으면,

const (
	Zero = iota
	One
	Two
)

이렇게 쓸 수도 있다. One, Two에 대해서는 Go가 알아서 iota를 이용해 값을 할당한 것으로 처리한다.