Golang 的枚举是如何实现的?

Golang 不支持内置的枚举类型,但可以通过自定义类型和常量来模拟枚举。
实现方式如下:
一、定义基础类型
使用 int 来表示枚举值:

type EnumType int

二、定义常量
使用常量来表示枚举成员:

const (  
    Member1 EnumType = iota  
    Member2   
    Member3
)

iota 用于给枚举成员编号。

三、类型切片
可以定义枚举类型切片:

var members = []EnumType{Member1, Member2, Member3}

四、类型断言
可以使用类型断言将接口值转换为枚举类型:

var a interface{} = Member1
i := a.(EnumType)

五、字符串转换
可以给每个常量添加字符串值,用于转字符串:

const (
   Member1 EnumType = iota +" first" 
   Member2             + " second"
)

然后调用 fmt.String() 方法:

fmt.Println(Member1.String()) // first

总的来说,Golang 通过:

  1. 基础类型表示值
  2. 常量表示成员
  3. 切片包含所有成员
  4. 类型断言转换类型
  5. 字符串转换

来模拟枚举类型功能。

主要分为两部分:

  • 值的表示
  • 字符串的表示

虽然不是内置的语法,但提供足够的枚举支持。