Golang 不支持内置的枚举类型,但可以使用 iota 模拟枚举。
具体实现方式如下:
一、 定义基础类型
使用 int 作为基础类型:
type Season int
二、 定义常量
使用常量声明枚举成员:
const (
Spring Season = iota // 0
Summer // 1
Autumn // 2
Winter // 3
)
这里 iota 用于给枚举成员赋值,初始值为 0,每增1。
三、iota的值
在下一个 const 中,iota 自动增1:
const (
a = iota // 0
b // 1
c // 2
)
const (
d = iota // still 0,different const block
e // 1
)
在同一个 const 块内部,iota 自动增1。
四、 _ 忽略iota
可以使用_忽略iota,保持不变:
const(
a = iota // 0
_ // still 0
b // 1
)
五、字符串值
可以给枚举值绑定字符串:
const (
Monday = iota + "Monday "
Tuesday +"Tuesday"
Wednesday +"Wednesday"
)
调用 .String() 方法:
fmt.Println(Monday.String()) // Monday
总的来说,Golang 使用 iota 模拟枚举实现包括:
- 基础类型
- 常量定义枚举成员
- iota 自动增1
- 使用_忽略iota
- 绑定字符串值
- 调用String()方法