go语言的iota是什么意思_Golang学习——常量const和iota
Golang中常量const和iota
一.const
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
Java编程规范中,常量一般都是全大写字母,但是在Golang中,大小写是具有一定含义的,所以不一定所有常量都得全大写
Golang中,大写字母开头表示public,小写字母开头表示private
1.语法
const 常量名 [数据类型] = value
数据类型可以忽略不写,Golang编译器会自动推断出数据类型。
在使用时,要注意以下几点:数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型
满足多重赋值
常量只定义不使用,编译不会报错
常量可以作为枚举,常量组
常量组中如不指定类型和初始化值,则与上一行非空常量右值相同
显示指定类型的时候,必须确保常量左右值类型一致,需要时可做显示类型转换。这与变量就不一样了,变量是可以是不同的类型值
2.实例
1.定义单个常量
const monday int = 1 // 显式类型定义const tuesday = "2" // 隐式类型定义const wednesday = 3 // 不使用 编译不会报错fmt.Printf("monday 的数据类型为:%T,值为:%d\n", monday, monday)
fmt.Printf("tuesday 的数据类型为:%T,值为:%s\n", tuesday, tuesday)
输出为:
monday 的数据类型为:int,值为:1
tuesday 的数据类型为:string,值为:2
2.定义一组常量
Golang中没有枚举类型,不像Java或Python中有Enum类可以实现枚举,所以Golang通过 const来实现枚举
const monday, tuesday, wednesday = 1, 2, 3
// 更推荐以下定义方式const (
one = 1
two = 2
three = 3
)
一组常量中,如果某个常量没有初始值,默认和上一行一致
const (
one = 1
two = 2
three = 3
four
five
)
fmt.Printf("four 的数据类型为:%T, 值为:%d\n", four, four)
fmt.Printf("five 的数据类型为:%T, 值为:%d\n", five, five)
输出为:
four 的数据类型为:int, 值为:3
five 的数据类型为:int, 值为:3
写到这里,不知道有没有这样一个想法,如果我的常量很多,难道每一个常量都要一一赋值吗?
Golang中有一个关键字,可以解决这个问题,在定义枚举时,通常都会结合const来使用
二.iota
iota,特殊常量,可以认为是一个可以被编译器修改的常量
1.知识点
在使用iota时,需要注意以下几点:
1. 每当定义一个const,iota的初始值为0
2. 每当定义一个常量,就会自动累加1
3. 直到下一个const出现,清零
4. 如果中断iota自增,则必须显式恢复。且后续自增值按行序递增
5. 自增默认是int类型,可以自行进行显示指定类型
6. iota 可以参与运算
加粗的部分是需要重点关注的,现在实例演示一下
2.实例
1.定义const枚举,首项为iota
const (
one = iota //iota初始值为0 two = iota //自增1 three = iota //再自增1)
fmt.Println("one 的值为:", one)
fmt.Println("two 的值为:", two)
fmt.Println("three 的值为:", three)
输出:
one 的值为: 0
two 的值为: 1
three 的值为: 2
可以看到,每一项都自增了1。 在定义时,不需要每次都写 iota,结合const的特性,iota除了首项之外,后续常量不显示写 iota,都会自增
2.不显示写 iota,常量也会自增
const (
one = iota //iota初始值为0 two
three
four
)
fmt.Println("one 的值为:", one)
fmt.Println("two 的值为:", two)
fmt.Println("three 的值为:", three)
fmt.Println("four 的值为:", four)
输出:
one 的值为: 0
two 的值为: 1
three 的值为: 2
four 的值为: 3
难道iota只能定义 0,1,2,3吗? 如果有别的值想用怎么办?
Golang中iota有一个非常非常好用的特性:iota可以参与计算
3.iota参与计算
比如,定义b,kb,mb…等等
const (
b = 1 << (iota * 10) // iota初始值为0 ,所以 1 << (0 * 10) kb // 1 << (1 * 10) mb // 1 << (2 * 10) gb // 1 << (3 * 10) tb // 1 << (4 * 10) pb // 1 << (5 * 10) )
fmt.Println(b, kb, mb, gb, tb, pb)
输出:
1 1024 1048576 1073741824 1099511627776 1125899906842624
是不是非常好用? 虽然Golang中没有枚举类,但是通过 const和iota也可以方便的实现枚举
三.结合 type,更能表现实际意义
在实际开发中,枚举类通常都是有一定意义的,比如:月份,vip等级…
上面的例子中,只是简单的定义了数字常量,我们可以定义一个具体类型,来表示这些常量,实现一个有意义的枚举
type VipLevel int
const (
vipOne VipLevel = 1 + iota
vipTwo
vipThree
vipFour
vipFive
)
fmt.Println(one, two, three, four, five)
输出:
1 2 3 4 5
总结一下,const和iota通常结合使用来定义枚举,为了使枚举更有意义,会自定义 type 类型。
要多注意 const和iota的特性,在使用的时候留心下,熟能生巧,勤练习,勤思考。
go语言的iota是什么意思_Golang学习——常量const和iota相关推荐
- go语言的iota是什么意思_关于Golang中的iota
快速一览 iota是Golang中提供的一个简化常量和枚举编程的标识符,合理的使用这个标识符可以让代码变得更简洁,省去大量的不必要的代码. 比如下面的这个常量定义 const ( a = 1 b = ...
- Go const和iota 使用实战
const 用于定义常量,定义之后不能修改,不能再次赋值,在程序运行期间不会改变 定义一个常量 const iota=3.1415926 批量声明常量 const (statusOk=200notFo ...
- go语言的iota是什么意思_golang 使用 iota
iota是golang语言的常量计数器,只能在常量的表达式中使用. iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(io ...
- 【C 语言】const 关键字用法 ( 常量指针 - const 在 * 左边 - 修饰数据类型 - 内存不变 | 指针常量 - const 在 * 右边 - 修饰变量 - 指针不变 )
文章目录 一.const 普通用法 二.常量指针 ( 指向 常量 的指针 | 被指向的内存不能被修改 ) 三.指针常量 ( 指针不能被修改 ) 三.指向 常量 的 指针常量 四.const 在 * 左 ...
- c 语言与试验系统,C/C++程序设计学习与实验系统
原名<Turbo C/C++ for Windows 集成实验与学习环境>,支持32位与64位的WI[详细介绍] 原名<Turbo C/C++ for Windows 集成实验与学习 ...
- C语言再学习 -- 关键字const
const 关键字其实我们并不陌生,之前有讲过const修饰数组和指针.现在来详细介绍这个关键字. 参看:[C/C++和指针]著名的<const的思考> 一.const 介绍 1.cons ...
- c语言数字灵活多变的访问形式_学习C语言你必须知道的事儿!
是新朋友吗?记得先点蓝字关注我哦- 今日课程菜单 Java全栈开发 | Web前端+H5 大数据开发 | 大数据分析 人工智能+Python | 人工智能+物联网 有听过这样一段话: 在编程界,C语 ...
- 基于易语言的键盘监听器(仅供学习)
基于易语言的键盘监听器(仅供学习) 软件原理 梳理 输入内容检测部分 发送部分 结束部分 准备工作 邮箱准备 支持库准备 模块准备 窗口准备 代码部分 程序集 启动窗口创建完毕 子程序1 编辑框1内容 ...
- 学了java有必要学c语言吗_程序员有必要学习C语言吗?这几点原因很现实
原标题:程序员有必要学习C语言吗?这几点原因很现实 C语言是编程语言中的一种,有不少程序员会有这样的疑问?难道做程序员就必须要学习C语言吗?甚至有人觉得,我平时的工作中也用不到C语言我为什么要学习呢? ...
最新文章
- UVa978 - Lemmings Battle!(优先级队列)
- 数据仓库与数据挖掘的一些基本概念
- activity 启动模式_Intent#FLAG_ACTIVITY_CLEAR_TOP 真的会 clear top 吗
- Codeforce 水题报告(2)
- 测试:abstract class不允许出现在Angular依赖注入框架的providers区域内
- 写论文,这个神器不能少!
- Spring Insight – Web应用程序分析
- lodop打印不显示页码_Excel|13个Excel打印技巧汇总,打印技巧大全
- php mysql 权重_PHP对MySql的常用操作
- python里怎么读取文件-python之文件读写
- 通过RHCE认证之路
- JSP中文显示乱码解决方案
- 手把手教你微信第三方平台开发
- SQL——数据各项操作代码实现
- 调用聚合数据新闻头条API
- 12306对抢票软件“下手”了 1
- element上传图片的时候额外参数
- 李白打酒 c语言,C语言递归调用1:李白打酒
- 概率论:概率空间的基本概念
- Poky环境的中文输入法实验二(XIM版本)
热门文章
- 【软考一】计算机系统基础知识(要多做题)
- 企业内容管理:中国信息化发展的加速器
- Successful at success
- 汉王人脸识别考勤机颠覆考勤市场
- Java调用系统解压_记一次Java利用cmd命令调用WinRAR压缩文件-压缩文件
- app功能性测试——安装卸载升级测试、交叉事件测试、通知推送测试
- Photoshop CC 2018 软件安装教程
- 台式计算机里的电池有啥用,电脑上的纽扣电池到底有什么用?需要更换吗?
- Window Styles / EX Styles ···
- emeditor 快捷键