본 게시물은 Tucker의 Go언어 프로그래밍을 참고해 작성한 게시물입니다.
http://www.yes24.com/Product/Goods/99108736
Tucker의 Go 언어 프로그래밍 - YES24
게임 회사 서버 전문가가 알려주는 Go 언어를 내 것으로 만드는 비법구글이 개발한 Go는 고성능 비동기 프로그래밍에 유용한 언어이다. 『Tucker의 Go 언어 프로그래밍』은 Go 언어로 ‘나만의 프로
www.yes24.com
상수 선언
상수는 변하지 않는 값을 말한다.
변수는 대입문을 통해서 수시로 바꿀 수 있지만, 상수는 초기화된 값이 변하지 않는다.
정수, 실수, 문자열 등 기본 타입값들만 상수로 선언될 수 있다. 구조체, 배열 등 기본 타입이 아닌 타입에는 상수를 사용할 수 없다.
const ConstValue int = 10
함수 외부에 선언되어 있고 첫 글자가 대문자인 상수는 패키지 외부로 공개되는 상수이다.
상수는 한 번 선언되면 그 값을 바꿀 수 없다.
func main() {
const C int = 10
var b int = C * 20
C = 20 // 에러 발생 - 상수는 대입문 좌변에 올 수 없음
fmt.Println(&C) // 상수 메모리 주솟값에 접근 불가
}
& 연산자를 변수 앞에 사용하면 그 변수의 메모리 주솟값을 반환한다. 하지만 상수 앞에 사용하면 상수의 메모리 주솟값을 접근할 수 없기 때문에 출력하면 에러가 발생한다.
상수는 값으로만 동작한다.
상수를 사용하는 이유
1. 변하면 안되는 값
원주율과 같이 고정된 숫자를 나타낼 떄 사용한다.
2. 코드값을 통해서 숫자에 의미를 부여할 때
아래는 동물 코드값에 따라 다른 문자열을 출력하는 예제이다.
const Cow int = 1
const Chicken int = 2
func PrintAnimal(animal int) {
if animal == Pig {
fmt.Println("꿀꿀")
} else if animal == Cow {
fmt.Println("음메")
} else if animal == Chicken {
fmt.Println("꼬끼오")
}
}
func main() {
PrintAnimal(0)
PrintAnimal(1)
PrintAnimal(2)
}
iota로 간편하게 열거값 사용하기
코드 값으로 사용하기 때문에 값이 그냥 1, 2, 3 ..처럼 1씩 증가하도록 정의할 때 iota 키워드를 사용하면 편리하다.
iota는 0부터 시작해 1씩 증가한다. 소괄호를 벗어나면 다시 초기화된다.
const (
Red int = itoa // 0
Blue int = itoa // 1
Green int = itoa // 2
)
만약 첫번째 값과 똑같은 규칙이 계속 적용된다면 타입과 iota를 생략할 수 있다.
const (
C1 uint = iota + 1 // 1 = 0 + 1
C2 // 2 = 1 + 1
C3 // 3 = 2 + 1
)
타입이 없는 상수
상수 선언 시 타입을 명시하지 않을 수 있다. 타입 없는 상숫값은 타입이 정해지지 않은 상태로 사용된다.
타입 없는 상수는 변수에 복사될 때 타입이 정해지기 때문에 여러 타입에 사용되는 상숫값을 사용할 때 편리하다.
const PI = 3.14 // 타입없는 상숫값
const FloatPI float64 = 3.14
var a int = PI * 100
// var b int = int(FloatPI) * 100 // 타입 오류 발생
fmt.Println(a)
상수와 리터럴
리터럴이란 고정된 값, 값 자체로 쓰인 문구이다.
var str string = "Hello world"
var i int = 0
"Hello world"와 0과 같이 고정된 값 자체로 쓰인 문구가 바로 리터럴이다.
Go언어에서 상수는 리터럴과 같이 취급한다. 컴파일 될 때 상수는 리터럴로 변환되어 실행 파일에 쓰인다.
// 컴파일 전
const PI = 3.14
var a int = PI * 100
// 컴파일 후
var a int = 314
상수의 메모리 주솟값에 접근할 수 없는 이유도 컴파일 타임에 리터럴로 전환되어서 실행파일에 값 형태로 쓰이기 때문이다.
'Programming language > Golang' 카테고리의 다른 글
| [Go] 11 for문 (0) | 2022.01.15 |
|---|---|
| [Go] 10 switch (0) | 2022.01.12 |
| [Go] 09 조건문 (0) | 2022.01.12 |
| [Go] 07 함수 (0) | 2022.01.11 |
| [Go] 06 연산자 (0) | 2022.01.10 |