这是一个伪命题,因为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
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
}