Go의 열거자

Jay Singh 2023년1월30일
  1. iota를 사용하여 Go에서 enums 표현
  2. iota를 사용하여 Go에서 자동 증가 번호 선언
  3. iota를 사용하여 Go에서 일반적인 동작 만들기
Go의 열거자

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