richcms使用golang开发,在go语言中,是没有枚举类型的,我使用以下方式,实现简单的枚举。以下代码以支付状态为例,展开说明。以下两个文件,都在enum这个package。

pay_state.go

package enum

import (
	"fmt"
	"sort"
)

// PayState 支付状态
type PayState int

const (
	PayStateFailure PayState = iota - 1
	PayStateNotYet
	PayStatePaying
	PayStateSuccess
)

var payStateText = map[PayState]string{
	PayStateFailure: "失败",
	PayStateNotYet:  "未付款",
	PayStatePaying:  "支付中",
	PayStateSuccess: "成功",
}

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

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

key_map.go

package enum

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

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
}