상수 선언
- 상수는 변하지 않는 값을 말합니다.
- 변수와 반대되는 개념이기도 합니다.
- 기본 타입 값만 허용합니다.
- 구조체, 배열 등 기본 타입이 아니면 상수를 사용할 수 없습니다.
// [상수 선언 키워드] [상수명] [타입] = [값] const ConstValue int = 10
상수 사용 예
package main import "fmt" // 고유한 숫자 값에 사용 const PI float64 = 3.151592653589793238 // 숫자에 의미를 부여해서 사용 const Aespa int = 0 const BlackPink int = 1 const BTS int = 2 // iota로 열거값 사용 const ( Aespa int = iota // 0 BlackPink int = iota // 1 BTS int = iota // 2 ) // 첫번째 값과 똑같은 규칙이 적용된다면 iota를 생략할 수 있음 const ( C1 uint = iota + 1 // 1 = 0 + 1 C2 // 2 = 1 + 1 C3 // 3 = 2 + 1 ) // 시프트 연산의 예 const ( BitFlag1 uint = 1 << iota // 1 = 1 << 0 BitFlag2 // 2 = 1 << 1 BitFlag3 // 4 = 1 << 2 BitFlag4 // 8 = 1 << 3 )
타입 없는 상수
타입 없는 상수는 변수에 복사될 때 타입이 정해진다.
// 타입 없는 상수 : 선언 시 타입을 명시하지 않으면 타입 없는 상수가 됨. const PI = 3.14 const FloatPI float64 = 3.14 var a int = PI * 100 // 오류가 발생하지 않음 var b int = FloatPI * 100 // 타입 오류 발생
상수와 리터럴
- 상수 표현식은 컴파일 타임에 리터럴로 변환 됩니다.
- 컴파일 시에 계산이 되기때문에 런타임에 CPU 자원을 사용하지 않습니다.
- 상수의 메모리 주소에 접근할 수 없는 이유는 컴파일 타임에 리터럴로 전환이 되었기 때문입니다.
- 동적 할당 메모리 영역을 사용하지 않습니다.
Tucker의 Go 언어 프로그래밍 참조.
책을 보면서 공부한 내용을 정리하면서 작성하는 글입니다. 따라서, 주제 하나를 많은 시간을 들여서 쓰지 않고, 간단하게 작성하는 것부터 시작해서, 계속 다듬어가면서 업데이트해 나갈 생각입니다. 참고하는 자료가 있을 때마다 출처를 적어 놓겠습니다.