Go语言现阶段没有枚举类型,但是可以使用 const 常量配合 iota 来模拟枚举类型

type Weapon int
const (Arrow Weapon = iota    // 开始生成枚举值, 默认为0ShurikenSniperRifleRifleBlower
)
// 输出所有枚举值
fmt.Println(Arrow, Shuriken, SniperRifle, Rifle, Blower)
// 使用枚举类型并赋初值
var weapon Weapon = Blower
fmt.Println(weapon)

代码输出如下:

一个 const 声明内的每一行常量声明,将会自动套用前面的 iota 格式,并自动增加,类似于电子表格中单元格自动填充的效果,只需要建立好单元格之间的变化关系,拖动右下方的小点就可以自动生成单元格的值。

当然,iota 不仅可以生成每次增加 1 的枚举值。还可以利用 iota 来做一些强大的枚举常量值生成器。下面的代码可以方便的生成标志位常量:

const (FlagNone = 1 << iotaFlagRedFlagGreenFlagBlue
)
fmt.Printf("%d %d %d\n", FlagRed, FlagGreen, FlagBlue)
fmt.Printf("%b %b %b\n", FlagRed, FlagGreen, FlagBlue)


在代码中编写一些标志位时,我们往往手动编写常量值,常量值特别多时,很容易重复或者写错,因此,使用 ioto 自动生成更加方便。

代码说明如下:

  • 第 2 行中 iota 使用了一个移位操作,每次将上一次的值左移一位(二进制位),以得出每一位的常量值。
  • 第 8 行,将 3 个枚举按照常量输出,分别输出 2、4、8,都是将 1 每次左移一位的结果。
  • 第 9 行,将枚举值按二进制格式输出,可以清晰地看到每一位的变化。

将枚举值转换为字符串

package main
import "fmt"
// 声明芯片类型
type ChipType int
const (None ChipType = iotaCPU    // 中央处理器GPU    // 图形处理器
)
func (c ChipType) String() string {switch c {case None:return "None"case CPU:return "CPU"case GPU:return "GPU"}return "N/A"
}
func main() {// 输出CPU的值并以整型格式显示fmt.Printf("%s %d", CPU, CPU)
}


String() 方法的 ChipType 在使用上和普通的常量没有区别。当这个类型需要显示为字符串时,Go语言会自动寻找 String() 方法并进行调用。

golang:模拟枚举相关推荐

  1. Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)

    枚举的特点: ◆类型安全(Type Safety)  ◆紧凑有效的枚举数值定义(Compact, Efficient Declaration of Enumerated Values)  ◆无缝的和程 ...

  2. jdk1.5新特性5之枚举之模拟枚举类型

    一 简单应用 package cn.xy.Enum; public enum TrafficLamp {  RED,GREEN,YELLOW; } TrafficLamp red = TrafficL ...

  3. golang 模拟M/M/s排队系统损失率,泊松分布到达,指数分布服务

    golang模拟M/M/s排队系统损失率,到达流强度lambda,服务强度miu,理论损失率为:lambda/(lambda+miu) 本程序通过泊松分布和负指数分布模拟排队系统并计算损失率,结果与理 ...

  4. golang实现枚举类型

    描述 golang无枚举类型, 但可以借助自定义类型实现 什么是枚举类型 枚举类型是一种类型, 它的值只有有限个. 换而言之, 枚举类型=一个类型+N个离散值 go的实现, 可以自定义一个类型, 把它 ...

  5. Counterfeit Dollar 模拟-枚举

    Counterfeit Dollar 模拟-枚举 Time limit:1000 ms Memory limit:10000 kB Source: East Central North America ...

  6. golang模拟post请求

    使用golang模拟post请求,首先用map封装数据,然后通过json.marshal方法转化成为[]byte类型,最后使用http.post方法 func main() {config := ma ...

  7. java+mock+例子_java – 如何使用PowerMock和Mockito模拟枚举类的实例?

    我试着按照这个非常相似的问题的答案提供的例子,但它对我不起作用.我收到以下错误消息: java.lang.IllegalArgumentException: Cannot subclass final ...

  8. Luogu P1039 侦探推理(模拟+枚举)

    P1039 侦探推理 题意 题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯 ...

  9. golang 模拟登陆微信公众平台,突破微信群发每日一条限制

    思路:微信后台可以对指定用户进行回复,群发其实就是一个loop,so 模拟POST提交到微信 后台, 模拟登陆,即可突破群发每日一条限制. 直接上代码 /**@author 菠菜君*@Version ...

最新文章

  1. 数据库中省区市组装成json_全国各省、市、县、镇、村的mysql数据库和JSON格式数据...
  2. 详解SQL Server连接(内连接、外连接、交叉连接)
  3. mysql crash_Mysql 无故crash
  4. linux php5.3 ssh2,Linux 安装php 的 ssh2扩展
  5. HarmonyOS之AI能力·图像超分辨率
  6. P1236-Network of Schools(学校网络)【最强联通块,Kosaraju】
  7. 哈希存储 java_Java容器系列之HashMap的存储
  8. 容器编排技术 -- 使用kubectl实现应用伸缩
  9. MySQL数据库之事务
  10. 橡胶柱压缩_橡胶=汽车半条命:浅谈ABAQUS橡胶大变形仿真5大注意事项
  11. Pepperl+Fuchs收购德国手持RFID设备提供商Ecom仪器
  12. Linux操作系统常用基本命令
  13. 如何将heic格式批量转化jpg
  14. HTML 参考手册 - 浏览器支持
  15. 【STM32】 AMS1117(稳压)模块
  16. lighttpd移植
  17. Identifying Antioxidant Proteins by Using Optimal Dipeptide Compositions论文笔记
  18. 鸿蒙系统有没有方舟编译器,华为鸿蒙系统终于来了! 首款方舟编译器应用正式上架: 鸿蒙OS可用...
  19. android实习日志_【安卓开发实习生工作总结_安卓开发实习生个人年终总结】-看准网...
  20. 停不下的脚步:IT高管人士的工作实录

热门文章

  1. python3 scrapy实战(简单实现爬取下载图片原理)
  2. HJ20 密码验证合格程序 Java
  3. 企业管理:名片的重要性
  4. 程序猿的一些幽默趣闻 个个经典
  5. 远程ssh连接过慢,解决方法
  6. openstack研究意义_OpenStack如何推动CERN的研究
  7. 2007年IBM合作伙伴峰会及新年策略发布
  8. NEMA数据经纬度转换
  9. 如何用计算机做大爆炸模拟,【比特大爆炸电脑版】官方手机模拟器怎么玩
  10. 《学术研究,你的成功之路》阅读笔记