상수는 변하지 않는 값을 말한다. const 키워드로 선언한다.
상수는 값으로만 동작하며 값, 이름, 타입 3가지 속성만 가진다. 상수는 보통 첫번째로 변하면 안되는 값에 사용하고, 두 번째로 코드값을 통해서 숫자에 의미를 부여할 때 쓴다.
코드값으로 사용하기 때문에 값이 그냥 1, 2, 3 처럼 증가하도록 정의 할때 iota 키워드를 사용하면 편리하다. 0부터 시작해 1씩 증가하는데 소괄호를 벗어나면 다시 초기화 된다.
const (
RED int = iota //1
BLUE int = iota //2
GREEN int = iota //3
)
또 다음과 같이 할 수도 있다.
const (
C1 int = iota
C2
C3
)
상수 선언 시 타입을 명시하지 않을 수 있다. 그러면 타입 없는 상수가 된다. 타입 없는 상수는 타입이 정해지지 않은 상태로 사용된다. 이 상수는 변수에 복사 될 때 타입이 정해지기 때문에 여러 타입에 사용되는 상숫값을 사용할때 편리하다.
const a = 3.14
var b int = a * 100 // 314
컴퓨터에서 리터럴이란 고정된 값, 값 자체로 쓰이는 문ㄱ라고 할 수 있다. Go언에서는 상수는 리터럴과 같이 취급합니다. 그래서 컴파일될 때 상수는 리터럴로 변환되어 실행파일에 쓰인다. 상수 표현식 역시 컴파일 타임에 실제 결과값 리터럴로 변환하기 때문에 상수 표현식 계산에 CPU 자원을 사용하지 않는다. 때문에 타입 없는 상수를 쓸 수 있는 것이고 해당 것은 컴파일 될 때에 변수에 타입과 함께 선언되는 것과 같게 된다.. 상수의 메모리 주솟값에 접근 할 수 없던 이유 역시 컴파일 타임에 리터럴로 전환되어서 실행 파일에 값 형태로 쓰이기 때문이다.