Go의 상수

October 19, 2024

상수 정의

상수란 변하지 않는 값으로, Go 언어에서는 const 키워드를 사용하여 상수를 정의한다. 상수는 다음과 같이 정의한다. 상수를 변경하려고 하면 컴파일 에러가 발생한다.
1package main 2 3import "fmt" 4 5const Pi = 3.14 6 7func main() { 8 fmt.Println(Pi) 9 10 Pi = 3.14159 // 컴파일 에러 11} 12

Iota

만약 상수를 Enum으로 사용하고 싶다면, iota를 사용할 수 있다. iota는 상수를 0부터 1씩 증가시키는 열거자로 사용된다. iota는 상수 블록에서만 사용할 수 있다.
1package main 2 3import "fmt" 4 5const ( 6 Apple = iota // 0 7 Banana = iota // 1 8 Cherry = iota // 2 9) 10 11func main() { 12 fmt.Println(Apple, Banana, Cherry) // 0 1 2 13} 14
혹은 다음과 같이 사용할 수도 있다.
1package main 2 3import "fmt" 4 5const ( 6 Apple = iota // 0 7 Banana // 1 8 Cherry // 2 9) 10 11func main() { 12 fmt.Println(Apple, Banana, Cherry) // 0 1 2 13} 14

타입이 없는 상수

Go 언어에서는 타입이 없는 상수를 사용할 수 있다. 타입이 없는 상수는 변수에 할당할 때 타입이 지정된다. 따라서 여러 타입에 사용할 수 있다.
1package main 2 3import "fmt" 4 5const PI = 3.14 // untyped constant 6const FloatPI float32 = 3.14 7 8func main() { 9 var a int = PI * 100 10 var b int = FloatPI * 100 // 에러 발생 11 12 fmt.Println("a =", a) 13 fmt.Println("b =", b) 14} 15

상수 리터럴

Go는 상수를 컴파일 타임에 실제 결과값 리터럴로 대체한다. 따라서 비교적 CPU 자원을 적게 사용한다.
1const PI = 3.14 2var a int = PI * 100 3
이 코드는 다음과 같이 컴파일된다.
1var a int = 314 2