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 通过:
- 基础类型表示值
- 常量表示成员
- 切片包含所有成员
- 类型断言转换类型
- 字符串转换
来模拟枚举类型功能。
主要分为两部分:
- 值的表示
- 字符串的表示
虽然不是内置的语法,但提供足够的枚举支持。