golang 是没有枚举的概念的.只能通过定义值来实现枚举的功能.例如
type Level uint32
const (
PuTong Level = iota
YuJing
BaoJing
)
但是如果枚举中出现同名就会出现错误.例如下面的和上面的不能在一个包里面
type User uint32
const (
PuTong Level = iota
Vip
)
那如何实现Level.PuTong User.Putong呢?既然定义常量不行,我们可以定义变量,并使用匿名结构来实现.
var Level = struct {
PuTong int
YuJing int
BaoJing int
}{1,2,3}
var User = struct{
PuTong int
Vip int
}{1,2}
好了.枚举可以用了.但是此时枚举是变量,无法阻挡黑魔法的入侵ou
枚举经常需要转换为字符串.上面的例子不好,做了改进
var Level = struct {
PuTong int
YuJing int
BaoJing int
}{"puTong","yuJing ","baoJing "}
var User = struct{
PuTong int
Vip int
}{"puTong","vip"}
枚举类型为string,依然阻挡不了黑魔法