在Go中没有提供enum
数据类型。但是我们可以自己动手撸一个。在互联网上,我发现了许多很好的枚举方法。在这里,我提出了一种相对较新的方法,该方法将许多其他解决方案结合在一起,但是有些不同。废话不多说 上代码。。。
使用起来如下:
animalY := enums.AnimalsEnum.Lion
animalX := enums.AnimalsEnum.Get("Jaguar")
animals.go
定义
package enums
import (
"reflect"
)
type animalsEnumDef struct {
Camel, Gorilla, Jaguar, Monkey, Lion int
}
func (c animalsEnumDef) Get(id string) int {
vo := reflect.ValueOf(c)
typeVo := vo.Type()
for i := 0; i < vo.NumField(); i++ {
if typeVo.Field(i).Name == id {
return vo.Field(i).Interface().(int)
}
}
return 0
}
var AnimalsEnum = animalsEnumDef{
Camel: 12,
Gorilla: 89,
Jaguar: 91,
Monkey: 107,
Lion: 114,
}
使用:
package main
import (
"fmt"
"github.com/enums/enums"
)
func main() {
checkEnum()
getEnum()
}
func checkEnum(){
myAnimal := 12
animal := enums.AnimalsEnum.Lion
if myAnimal == animal {
fmt.Print("\nAnimal is a Lion.")
}else{
fmt.Print("\nAnimal is not a Lion.")
}
}
func getEnum(){
animalX := enums.AnimalsEnum.Get("Jaguar")
fmt.Printf("\nJaguar ID is: %v", animalX)
}
希望能给你带来一些帮助。