chapter 8에서는 Go 언어에서 상수를 활용하는지에 대해서 설명한다.
1. 상수의 정의
2. 상수 선언법
3. 상수 사용법
4. 열거값 사용법
상수는 기본적으로 변하지 않는 값을 표현할 때 사용된다. (항)상 (같은)수라고 이해하면 편하다.변수는 프로그램 런타임 시, 수시로 변(경 될 수 있는)수라고 생각하자상수를 변경하고자 하면, 에러가 발생한다.상수의 불변성을 통해 프로그래머는 자주 사용되지만 절대로 변경되지 않는 숫자값 혹은 문자열 값을 상수로 지정하여 사용한다.상수는 컴파일 시, 리터럴로 치환되어 프로세스 메모리 구조의 Text 영역의 실행 파일 코드 속에 저장된다. 그렇기 때문에, 메모리 주소를 출력할 수 없다.const 키워드를 통해 선언한다. const ConstValue1 int = 10
const ConstValue2 = "CONSTANT_VALUE"
int, float complex(복소수)booleanrune, stringrune은 유니코드(UTF-8)를 제어하기 위한 타입으로 Go언어 에서는 int32 타입을 재정의하여 사용하고 있다. 자세한건 docs를 확인해보자.ConstValue2와 같이 타입이 명시되지 않은 상수는 변수에 대입되거나, 연산, 함수 호출과 같이 변수에 복사될 때, 적절한 타입으로 정해진다.상수의 경우에는 타입을 명시하지 않는 것이 편리한다.상수는 1)변하는 안되는 값을 선언하고자 할 때, 2)코드 값을 통해서 값에 의미를 부여하고자 할 때, 사용한다.
3.141592653589793238...로 고정된 값이다. 숫자 계산 시, 사용되는 원주율 값이 바뀌어 버리면 문제가 발생할 수 있다.HTTP 프로토콜에서 응답코드 200은 OK를 의미하는 것을 알고 있다. 이처럼 특정 숫자나 문자에 의미가 있을 때, 상수를 사용하면, 오탈자 혹은, 가독성 차원에서 안전한 프로그램을 생산할 수 있다.animal:="Pig"const Pig = "Pig"
animal = Pig
Enum을 통해서 열거 상수를 제어할 수 있다. Go에서는 iota키워드를 통해서 순차적으로 0부터 하나씩, 열거 상수를 제어할 수 있다.iota는 소괄호에 묶인 초기화 코드 블록안에서만 유효하고, 이를 벗어나면 다시 초기값으로 iota가 진행하던 값들의 순서가 초기화된다. 즉, 0부터 다시 시작한다.package mainimport "fmt"
const (
RED int = iota // 0
BLUE int = iota // 1
GREEN int = iota // 2
)
const (
C1 uint = iota + 1 // 1 + 0 = 1
C2 // 1 + 1 = 2
C3 // 1 + 2 = 3
)
const (
BIG_FLAG1 uint = 1 << iota //1 << 0 = 1
BIG_FLAG2 // 1 << 1 = 2
BIG_FLAG3 // 1 << 2 = 4
BIG_FLAG4 // 1 << 3 = 8
)
func main() {
fmt.Println(RED, BLUE, GREEN)
fmt.Println(C1, C2, C3)
fmt.Println(BIG_FLAG1, BIG_FLAG2, BIG_FLAG3, BIG_FLAG4)
}