Go의 열거자
Jay Singh
2023년1월30일
enum
(enumerator의 줄임말)은 의미 있는 이름을 가지지만 단순하고 고유한 값을 가진 복잡한 상수 그룹을 설계하는 데 사용됩니다.
Go에는 enum
데이터 유형이 없습니다. 사전 정의된 식별자 iota
를 사용하고 enum
은 타이트하게 입력되지 않습니다.
iota
를 사용하여 Go에서 enums
표현
‘iota’는 자동 증가 숫자 선언을 단순화할 수 있는 상수 식별자입니다. 0부터 시작하는 정수 상수를 나타냅니다.
iota
키워드는 숫자 상수 0, 1, 2,...
를 나타냅니다. const
라는 용어는 소스 코드에서 0
으로 재설정되고 각 const
사양에 따라 증가합니다.
package main
import "fmt"
const (
a = iota
b = iota
c = iota
)
func main() {
fmt.Println(a, b, c)
}
출력:
0 1 2
iota
를 사용하여 Go에서 자동 증가 번호 선언
이 방법을 사용하면 각 상수 앞에 순차적 iota
를 배치하는 것을 피할 수 있습니다.
package main
import "fmt"
const (
a = iota
b
c
)
func main() {
fmt.Println(a, b, c)
}
출력:
0 1 2
iota
를 사용하여 Go에서 일반적인 동작 만들기
우리는 Direction
이라는 간단한 enum
을 정의합니다. 여기에는 "east"
, "west"
, "north"
및 "south"
의 네 가지 잠재적 값이 있습니다.
package main
import "fmt"
type Direction int
const (
East = iota + 1
West
North
South
)
// Giving the type a String method to create common behavior
func (d Direction) String() string {
return [...]string{"East", "West", "North", "South"}[d-1]
}
// Giving the type an EnumIndex function allows you to provide common behavior.
func (d Direction) EnumIndex() int {
return int(d)}
func main() {
var d Direction = West
fmt.Println(d)
fmt.Println(d.String())
fmt.Println(d.EnumIndex())
}
출력:
West
West
2