HOWTO · Go

Go의 열거자

이 튜토리얼은 Go에서 Enum을 표현하는 관용적인 방법을 보여줍니다.

이 페이지의 내용

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