关于枚举设计的几个思考点
1.易于维护
go没有其他面向对象语言那样丰富的枚举类型设计,但是枚举在项目中我们常常用到,且枚举在不断调整,所以
易于维护的编码设计极其重要,下面我出一个易于维护的设计思想,且在维护过程中不易出错.
2.处理方便
主要维护点:init中map的维护,const数值的维护
主要的方法:String(),Value(),Parse()
type OrderStatus int
var OrderStatusMap map[OrderStatus]string
func init() {
OrderStatusMap = make(map[OrderStatus]string)
OrderStatusMap[Created] = "Created"
OrderStatusMap[Paided] = "Paided"
OrderStatusMap[Delivering] = "Delivering"
OrderStatusMap[Completed] = "Completed"
OrderStatusMap[Canceled] = "Canceled"
}
const (
Unkown OrderStatus = 0 //未定义状态
Created OrderStatus = 1 //使用数字,禁用iota,原因:方便直接知道值是多少;避免中间插入新值影响原有的值
Paided OrderStatus = 2
Delivering OrderStatus = 3
Completed OrderStatus = 4
Canceled OrderStatus = 5
)
func (i OrderStatus) String() string {
return OrderStatusMap[i]
}
func (i OrderStatus) Value() int {
return int(i)
}
func ParseOrderStatus(name string) (OrderStatus, error) {
for k, v := range OrderStatusMap {
if v == name {
return k, nil
}
}
return Unkown, errors.New("Unkown")
}