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
}