[Go] #2.3 상수의 선언과 초기화
강의 링크 : 한 눈에 끝내는 고랭 기초 #2 변수와 상수 - 상수의 선언과 초기화
3. 상수의 선언과 초기화
변수에 이어서 이번에는 상수다.
상수의 선언과 초기화는 여타 언어들처럼 const
를 사용한다.
선언 형태는 다음과 같다.
const 상수이름 상수형
상수형
은 생략 가능하고, 함수 밖에서도 동일한 용법이 적용된다.
참고로, 상수는 선언과 초기화를 반드시 동시에 해야하며, 선언만 할 경우 에러가 발생한다.
다만 변수와는 다르게, 초기화 후에 사용하지 않아도 에러가 발생하지 않는다.
상수는 명시하는 것 자체에 의미가 있기 때문이다.
상수는 var
키워드 대신에 const
를 사용하고 생략할 수 없기 때문에 자연스럽게 :=
용법을 사용할 수 없다.
샘플 코드를 보자.
package main
import "fmt"
const username = "kim"
func main() {
const a int = 1
const b, d= 10, 20 //여러 값을 초기화할 수 있음
const c = "goorm"
fmt.Println(username)
}
상수이기 때문에 사용하지 않아도 에러가 발생하지 않으며, Println
함수에 인수로 넣을 수 있음을 확인했다.
const (
상수이름1 = 값1
상수이름2 = 값2
...
)
또한 상수는 위와 같이 괄호 ()
를 이용해 여러 개의 값을 묶어서 초기화할 수 있으며, 다른 형이라도 상관없다.
또한 괄호의 시작과 끝 위치는 상관없지만, 각 상수들은 반드시 개행하여 초기화 해야한다.
그냥 개행만 할 뿐, 각 상수들 사이에 콤마 ,
를 넣으면 안된다.
또한 묶어서 선언된 상수들 중 첫번째 값은 꼭 초기화되어야 하고, 초기화되지 않은 값은 바로 전 상수의 값을 가진다.
iota
라는 식별자를 값으로 초기화하면 그 후에 초기화하지 않고 이어지는 상수들은 순서(index)가 값으로 저장된다.
주의사항이 많다 …
샘플 코드를 보면서 이해해보자.
package main
import "fmt"
const (
c1 = 10 //첫 번째 값은 무조건 초기화해야 함
c2
c3
c4 = "goorm" //다른 형 선언 가능
c5
c6 = iota //c8까지 index값 저장
c7
c8
c9 = "earth"
c10
c11 = "End"
)
func main() {
fmt.Println(c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11)
}
c1
은 무조건 초기화 해야한다.
그 뒤로 이어지는 c2
, c3
은 바로 전 상수인 c1
의 값을 가진다.
c4
는 앞과 다르게 string
형으로 초기화 되었다.
c5
는 c4
의 값을 가진다.
c6
은 iota
라는 식별자를 값으로 초기화되었기 때문에, 순서(index) 로 할당된다.
c6
부터 c8
까지 5, 6, 7이 할당되었으므로, 제일 첫 인덱스는 0인 것 같다.
c9
부터 c11
은 생략.