本文介绍golang中枚举的使用。
什么是枚举类型
是一组命名的常数,常量值可以是连续的,也可以是断续的。
说明
Golang中并没有真正的枚举类型,往往都是自己定义常量,当作枚举类型来使用。
简单用法
下面以订单状态来举例说明go中枚举类型的使用方式。
- 定义枚举常量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21type OrderState uint
const(
// 待确认
OrderConfirmed OrderState = iota + 1
// 待支付
OrderPaying
// 待发货
OrderShipping
// 待收货
OrderReceiving
// 已收货
OrderReceived
// 已完成
OrderCompleted
)
func main() {
var state =6 // 模拟从数据库中获取到的状态
if OrderState(state) == OrderCompleted {
fmt.Println("订单已完成")
}
}
扩展
对于枚举常量,我们时常也需要展示类型的名称,如展示订单状态名称
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24var (
OrderStateItems = map[OrderState]string{
OrderConfirmed: "待确认",
OrderPaying: "待支付",
OrderShipping: "待发货",
OrderReceiving: "待收货",
OrderReceived: "已收货",
OrderCompleted: "已完成",
}
)
// OrderStateEnum 枚举类
type OrderStateEnum struct {
// v 值
v OrderState
}
// Name 获取订单状态名称
func (e OrderStateEnum) Name() string {
return OrderStateItems[e.v]
}
func main() {
var e = OrderStateEnum{OrderCompleted}
fmt.Println(e.Name())
}检查枚举是否合法
1
2
3
4
5
6
7
8
9// IsValid 检查枚举是否合法
func (e OrderStateEnum) IsValid() bool {
_, ok := OrderStateItems[e.v]
return ok
}
func main() {
var e = OrderStateEnum{OrderCompleted}
fmt.Println(e.IsValid())
}
- 本文作者: Hongker
- 本文链接: https://hongker.github.io/2020/04/10/golang-enum/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!