深入理解 Go 语言中的 iota

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,我们可以轻松创建连续递增的常量值,从而提高代码的可读性和可维护性。

相关推荐
学习星球18 小时前
# 6G通感一体化(ISAC)技术深度解析——从原理到实战> <br />
go·信息与通信·媒体
小满zs21 小时前
Go语言第十章(指针)
后端·google·go
学习星球2 天前
6G核心网架构深度解析——AI Native时代的网络变革
网络·人工智能·5g·架构·go·信息与通信
ylj_dev3 天前
从 0 构建 AI Workload Platform(九):真实场景、最小控制台与开源发布
go·react·开源项目·工作流·ai agent
tyung3 天前
znet 数据编解码:字节流怎么变成消息
后端·网络协议·go
leeyi3 天前
数据库迁移不翻车:golang-migrate 实战,143 个 DDL 有序执行(第97篇-E83)
go·aigc·agent
用户330144867633 天前
mheap:全局堆管理器
go
用户330144867633 天前
10. Large 对象分配:直接路径
go
yinchnag3 天前
CRTP:奇异递归模板模式在 Go 模块系统中的实现
设计模式·go
ylj_dev4 天前
从 0 构建 AI Workload Platform(七):可观测性、故障注入与性能验证
go·prometheus·可观测性·opentelemetry·故障注入