golang2021变量基础(18)
Go语言现阶段没有枚举类型,但是可以使用 const 常量配合上一节《Go语言常量》中介绍的 iota 来模拟枚举类型,请看下面的代码:
type Weapon int
const (
Arrow Weapon = iota // 开始生成枚举值, 默认为0
Shuriken
SniperRifle
Rifle
Blower
)
// 输出所有枚举值
fmt.Println(Arrow, Shuriken, SniperRifle, Rifle, Blower)
// 使用枚举类型并赋初值
var weapon Weapon = Blower
fmt.Println(weapon)
代码输出如下:
0 1 2 3 4
4
代码说明如下:
第 1 行中,将 int 定义为 Weapon 类型,就像枚举类型的本质是一个 int 类型一样。当然,某些情况下,如果需要 int32 和 int64 的枚举,也是可以的。
第 4 行中,将常量 Arrow 的类型标识为 Weapon,这样标识后,const 下方的常量可以使用 Weapon 作为默认类型。该行使用 iota 进行常量值自动生成,iota 的起始值为 0,一般情况下也是建议枚举从 0 开始,让每个枚举类型都有一个空值,方便业务和逻辑的灵活使用。
一个 const 声明内的每一行常量声明,将会自动套用前面的 iota 格式,并自动增加,类似于电子表格中单元格自动填充的效果,只需要建立好单元格之间的变化关系,拖动右下方的小点就可以自动生成单元格的值。
当然,iota 不仅可以生成每次增加 1 的枚举值。还可以利用 iota 来做一些强大的枚举常量值生成器。下面的代码可以方便的生成标志位常量:
const (
FlagNone = 1 << iota
FlagRed
FlagGreen
FlagBlue
)
fmt.Printf("%d %d %d ", FlagRed, FlagGreen, FlagBlue)
fmt.Printf("%b %b %b ", FlagRed, FlagGreen, FlagBlue)
代码输出如下:
2 4 8
10 100 1000
在代码中编写一些标志位时,我们往往手动编写常量值,常量值特别多时,很容易重复或者写错,因此,使用 ioto 自动生成更加方便。
代码说明如下:
第 2 行中 iota 使用了一个移位操作,每次将上一次的值左移一位(二进制位),以得出每一位的常量值。
第 8 行,将 3 个枚举按照常量输出,分别输出 2、4、8,都是将 1 每次左移一位的结果。
第 9 行,将枚举值按二进制格式输出,可以清晰地看到每一位的变化。
将枚举值转换为字符串
枚举在 C# 中是一个独立的类型,可以通过枚举值获取该值对应的字符串。例如,C# 中 Week 枚举值 Monday 为 1,那么可以通过 Week.Monday.ToString() 函数获得 Monday 字符串。
Go语言中也可以实现这一功能,代码如下所示:
转换字符串:
package main
import "fmt"
// 声明芯片类型
type ChipType int
const (
None ChipType = iota
CPU // 中央处理器
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)
}
运行结果:
CPU 1
代码说明如下:
第 6 行,将 int 声明为 ChipType 芯片类型。
第 9 行,将 const 里定义的常量值设为 ChipType 类型,且从 0 开始,每行值加 1。
第 14 行,定义 ChipType 类型的方法 String(),返回值为字符串类型。
第 15 22 行,使用 switch 语句判断当前的 ChitType 类型的值,返回对应的字符串。
第 30 行,按整型的格式输出 CPU 的值。
String() 方法的 ChipType 在使用上和普通的常量没有区别。当这个类型需要显示为字符串时,Go语言会自动寻找 String() 方法并进行调用。
桌面颜值担当,数据存储扩展实力也不俗写在前面最近换了新工作。由于工作需求,对于数据存储的的要求提高。平时出差只是Macbook,内存只有128G(卑微打工人)。128G对于日常办公实在有点捉襟见肘。在网上看了半天相中
有了它,再也不用担心照片隐私泄露了前言为什么买这个产品,出于什么样的需求(文件的加密)产品包装,外观,材质,大小,视觉,触感,配件安装安装拆卸(三步极简免工具安装)功能功能特性突出卖点(数字加密功能,便携)总结值得
和U盘一样大小比U盘更快的固态硬盘日常使用U盘的时候我们可能发现这样的问题,如果文件过大,U盘的容量可能不够,而且文件复制的速度特别慢。而使用2。5或3。5英寸的移动硬盘,体积又特别大,有时候还需要外接电源,感觉会
摄影爱好者的神器,SDExpress7。0读卡设备对于移动存储产品使用者来说,经常会用到U盘,SDTF读卡器等设备,对于摄影爱好者来说,读卡设备也是必不可少的。目前SDExpress高速卡已经上市,而相应的读卡设备却很少。这款产品
一生只送一人ROSEONLY将奢侈品基因融入品牌近几年,互联网孵化了不少品牌。但是互联网所孵化的品牌也拥有非常明显的劣势,那就是很多人会把互联网孵化的品牌看成是屌丝品牌。因为互联网它毕竟门槛不够高,所以导致很多互联网出来的品牌会
每一场,都在场爱普生大屏巡游日上海首站正式启程2021年7月31日至8月1日,爱普生联手腾讯视频极光TV大屏巡游日首站活动在上海大宁国际商业广场举行。本次活动以每一场,都在场为主题,由此一场唤醒夏日热情的视听盛宴正式拉开序幕!
不能给环卫工人涨工资!专家说怕大学生来抢饭碗昨天刷抖音的时候,看到一位专家堂而皇之的言论,把我的肺都快气炸了!我翻了一下,她的粉丝量有1。3万,这条视频竟然有3。8万的点赞量!我简单描述一下这位专家的理论专家说不能给环卫工人
索尼X95J开启多彩智能生活电视丰富了人们的生活,让我们足不出户就能了解外面世界的多姿多彩,丰富了我们的娱乐生活,我们可以多方面多视角的了解来自社会的信息与知识,拓宽我们的视野。索尼一直致力于电视机的生产与革
姚振华抢占行业先机带领宝能布局高端制造领域作为一家实力雄厚的大型现代化企业集团,宝能集团始终专注于深耕实体经济,发力高端制造领域,并不断探索新机遇,谋求新发展。在董事长姚振华的带领下,宝能集团通过持续提升自身的发展实力,不
继首单碳托管后全国第一单外资碳抵押再次花落金鹰全国第一单外资碳排放权抵押业务花落金鹰集团。8月2日,新加坡金鹰集团与建设银行广东省分行签定碳排放权质押贷款合同。这是继半个月前,金鹰集团与交通银行达成全国首单外资碳资产托管协议后
WearfitPRO从工具到平台,每一步都超越想象无论是凶猛的疫情期间,还是依然不能掉以轻心的后疫情时代,健康成为当下人们关注的焦点。而且现代人熬夜不规律饮食缺乏运动且高压的生活也在摧残着人们的身体,随着近年来居民生活健康意识的提