1、golang中是没有枚举的
在golang极简的哲学思想中,没有内置枚举类型
这里我们通过map+iota去实现一个枚举类型
1.1、需求
枚举值如下:
key | value |
---|---|
1 | 发电类 |
2 | 储能类 |
13 | 负荷类 |
1.2、自定义枚举类
// 定义一个类型
type TYPEID int
// 定义key(数值类型)
const (
DEVICE_TYPE_ID1 TYPEID = iota + 1
DEVICE_TYPE_ID2
DEVICE_TYPE_ID3
)
// 定义枚举值
var ENUM_DEVICE_TYPE_ENUM = map[TYPEID]string{
DEVICE_TYPE_ID1: "发电类",
DEVICE_TYPE_ID2: "储能类",
DEVICE_TYPE_ID3: "负荷类",
}
1.3、测试
func main() {
for i := 1; i < 4; i++ {
fmt.Println(ENUM_DEVICE_TYPE_ENUM[TYPEID(i)])
}
fmt.Println("=========")
fmt.Println(ENUM_DEVICE_TYPE_ENUM[DEVICE_TYPE_ID2])
}
打印如下:
发电类
储能类
负荷类
=========
储能类
1.4、完整代码
package main
import "fmt"
type TYPEID int
const (
DEVICE_TYPE_ID1 TYPEID = iota + 1
DEVICE_TYPE_ID2
DEVICE_TYPE_ID3
)
var ENUM_DEVICE_TYPE_ENUM = map[TYPEID]string{
DEVICE_TYPE_ID1: "发电类",
DEVICE_TYPE_ID2: "储能类",
DEVICE_TYPE_ID3: "负荷类",
}
func main() {
for i := 1; i < 4; i++ {
fmt.Println(ENUM_DEVICE_TYPE_ENUM[TYPEID(i)])
}
fmt.Println("=========")
fmt.Println(ENUM_DEVICE_TYPE_ENUM[DEVICE_TYPE_ID2])
}