golang枚举(enum)的实现

Golang 归档:201902
普通
浏览:6769
2019-02-03 12:20:42
这是一个伪命题,因为golang中现在没有enum类型,只有自己写一个罗?

这是一个伪命题,因为golang中现在没有enum类型,只有自己写一个罗?
直接上代码了:

//SourceType 固定来源类型
type SourceType int

const (
    //SourceType_PC PC
    SourceType_PC SourceType = iota + 1
    SourceType_H5
    SourceType_Android
    SourceType_IOS
)

var sourceTypeText = map[SourceType]string{
    SourceType_PC:      "PC",
    SourceType_H5:      "H5",
    SourceType_Android: "Android",
    SourceType_IOS:     "苹果",
}

//Chinese 状态中文
func (m SourceType) Chinese() string {
    return sourceTypeText[m]
}

//List 列表输出
func (m SourceType) List() []KeyMap {
    km := make([]KeyMap, 0)
    for k, v := range majorTypeText {
        km = append(km, KeyMap{Key: fmt.Sprintf("%v", v), Val: int(k)})
    }
    sort.Sort(KeyMapSlice(km))
    return km
}

在这个基础上,可以自己扩展写 sourceTypeColor的 map

var sourceTypeColor = map[SourceType]string{
    SourceType_PC:      "red",
    SourceType_H5:      "red",
    SourceType_Android: "blue",
    SourceType_IOS:     "green",
}

//Color 
func (m SourceType) Color() string {
    return sourceTypeColor[m]
}

使用的时候

var xxx SourceType_PC
xx.Chinese()
xx.Color()

需要一个KeyMapSlice

//KeyMap 输出模型
type KeyMap struct {
    Key string `json:"k"`
    Val int    `json:"v"`
}

type IntKeyMap struct {
    Key int `json:"k"`
    Val int `json:"v"`
}

//KeyMapSlice keymap sort
type KeyMapSlice []KeyMap

func (s KeyMapSlice) Len() int {
    return len(s)
}

func (s KeyMapSlice) Swap(i, j int) {
    s[i], s[j] = s[j], s[i]
}

func (s KeyMapSlice) Less(i, j int) bool {
    return s[i].Val < s[j].Val
}
注意事项
  • 此文章对你有帮助,对作者表示感谢(微信):
  • 本文地址:https://22v.net/article/3234/
  • 转载本文时,请注明转载自“SamBlog”的字样。
  • 如此文章有损您的合法权益,请使用页面底部的邮箱与我取得联系。
分类目录
文章归档
友情站点