前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go奇技淫巧之enum

Go奇技淫巧之enum

作者头像
用户3904122
发布2022-06-29 14:41:22
5730
发布2022-06-29 14:41:22
举报
文章被收录于专栏:光华路程序猿

在Go中没有提供enum数据类型。但是我们可以自己动手撸一个。在互联网上,我发现了许多很好的枚举方法。在这里,我提出了一种相对较新的方法,该方法将许多其他解决方案结合在一起,但是有些不同。废话不多说 上代码。。。

使用起来如下:

代码语言:javascript
复制
animalY := enums.AnimalsEnum.Lion
animalX := enums.AnimalsEnum.Get("Jaguar")

animals.go定义

代码语言:javascript
复制
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,
}

使用:

代码语言:javascript
复制
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)
}

希望能给你带来一些帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-02-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 光华路程序猿 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档