iota是go语言的常量计数器,只能在常量表达式中使用,iota在const关键字出现时将被重置为0,const中每新增一行常量声明将使iota计数一次,可理解为const语句块中的行索引。它会自动递增,从0开始。
修改步长
尽管默认步长为1,但我们也可以通过在常量声明中显式赋值来修改 iota 的步长。这使得我们可以创建其他递增序列,比如:
go
const (
A = iota * 2 // 0 * 2 = 0
B // 1 * 2 = 2
C // 2 * 2 = 4
// ...
)
注意项
const中每增加一行常量声明都会使iota计数一次,可理解为const语句块中的行索引
go
const (
A = iota //0
B = 2 //100
C //2
)
iota是const语句块中的行索引,而不是变量索引,其计数只与const语句块中的行数相关
go
const(
A,B = iota + 1 , iota + 2 //A:1 B:2
C,D = iota + 1 , iota + 2 //C:2 D:3
)
场景应用
iota 在许多场景下都非常有用:
- 枚举类型: 创建一系列枚举值时,可以使用 iota 来自动生成连续递增的值。
- 标志位和位掩码: iota 可以用于创建用于标志位和位掩码的常量,使代码更具可读性。
- 自动生成 ID: 在需要为数据实体生成唯一 ID 的情况下,iota 可以作为一个简单的计数器。
- 定义数量级: 进制转换上很方便
枚举类型
go
// 星期
const (
Sunday Weekday = iota // 0
Monday // 1
Tuesday // 2
// ...
)
标志位和位掩码
go
const (
ReadPermission = 1 << iota // 1
WritePermission // 2
ExecutePermission // 4
)
自动生成 ID
go
const (
UserID1 = iota + 1
UserID2
UserID3
)
定义数量级
const(
_ = iota
KB = 1 << (10 * iota) //代表一个二进制数:10000000000 2的10次方即1024
MB // 对应着 1<<(10*2) 2的20次方
GB // 2的30次方
)
总结
通过使用 iota,我们可以轻松创建连续递增的常量值,从而提高代码的可读性和可维护性。