Go项目如何使用枚举
导读:本文共2732.5字符,通常情况下阅读需要9分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要:本文小编为大家详细介绍“Go项目如何使用枚举”,内容详细,步骤清晰,细节处理妥当,希望这篇“Go项目如何使用枚举”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。为什么要有枚举我们以java语言为例子,在JDK1.5之前没有枚举类型,我们通常会使用int常量来表示枚举,一般使用如下:publicstaticfinalintCOLOR_RED=1;publicstaticf... ...
目录
(为您整理了一些要点),点击可以直达。我们以java语言为例子,在JDK1.5之前没有枚举类型,我们通常会使用int常量来表示枚举,一般使用如下:
使用int类型会存在以下隐患:
不具备安全性,声明时如果没有使用final就会造成值被篡改的风险;
语义不够明确,打印int型数字并不知道其具体含义
于是乎我们就想到用常量字符来表示,代码就变成了这样:
这样也同样存在问题,因为我们使用的常量字符,那么有些程序猿不按套路出牌就可以使用字符串的值进行比较,这样的代码会被不断模仿变得越来越多的,然后屎山就出现了;
所以我们迫切需要枚举类型的出现来起到约束的作用,假设使用一个枚举类型做入参,枚举类型就可以限定沙雕用户不按套路传参,这样就可以怼他了,哈哈~;
使用枚举的代码就可以变成这样,传了枚举之外的类型都不可以了;
Go语言就没有枚举类型,我们该使用什么方法来替代呢?
枚举通常是一组相关的常量集合,Go语言中有提供常量类型,所以我们可以使用常量来声明枚举,但也同样会遇到上述的问题,起不到约束的作用,所以为了起到约束我们可以使用Go语言另外一个知识点 -- 类型定义,Go语言中可以使用type关键字定义不同的类型,我们可以为整型、浮点型、字符型等定义新的类型,新的类型与原类型转换需要显式转换,这样在一定程度上也起到了约束的作用,我们就可以用Go语言实现如下枚举:
上面的代码就会报错:
./main.go:19:12: cannot use a (variable of type int) as type OrderStatus in argument to IsCreated
定义新的类型可以起到约束作用,比如我们要检查状态机,入参限定了必须是OrderStatus类型,如果是int类型就会报错。
上面我们的枚举实现方式只能获取枚举值,获取不到其映射的字面意思,所以我们可以优化一下,实现String方法,使用官方提供的cmd/string来快速实现,代码如下:
执行命令go generate ./...生成orderstatus_string.go文件:
Go语言使用protobuf会生成对应的枚举代码,我们发现其中也是使用定义新的类型的方式来实现的,然后在封装一些方法,我们来赏析一下protobuf生成的枚举代码:
Go项目如何使用枚举的详细内容,希望对您有所帮助,信息来源于网络。