• Go 语言 iota 的神奇力量


    前言

    当你深入研究官网库、开源库或者任何一个 Go 项目时,你都会发现 iota 这个神奇的标识符无处不在。它扮演着一种重要的角色,让代码变得更加简洁、清晰,并提高了可读性和可维护性。它的应用范围广泛,从枚举类型到位运算,再到复杂的常量表达式计算,无所不能。
    在本文中,我将带着大家深入探讨 iota 的神奇力量,包括 iota 的介绍和应用场景以及使用技巧和注意事项。
    准备好了吗?准备一杯你最喜欢的饮料或茶,随着本文一探究竟吧。

    iota 介绍

    Within a constant declaration, the predeclared identifier iota represents successive untyped integer constants.
     Its value is the index of the respective ConstSpec in that constant declaration, starting at zero.[1]
    
    • 1
    • 2

    上面的引文来自官网文档 Iota,原话翻译成中文的意思是:
    在常量声明中,预先声明的标识符 iota 代表连续的无类型的整数常量。它的值是该常量声明中对应 ConstSpec 的索引,从零开始计数。
    简而言之,通过使用 iota,我们可以在常量声明中自动创建一系列连续的整数值,值从零开始,而不需要手动指定每个常量的值。

    iota 的应用场景

    自动生成递增的常量值

    使用 iota 可以方便地生成递增的常量值。在常量声明中的第一个使用 iota 的常量初始化为 0,而后出现的常量的值都会自动递增,这使得在定义一组递增常量时无需手动指定每个常量的值,提高了代码的 可读性 和可 维护性。例如:

    const (
    	Apple  = iota // 0
    	Banana        // 1
    	Cherry        // 2
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    构建枚举类型常量

    通过使用 iota 可以轻松定义一系列相关的枚举值,而无需为每个值手动指定具体的数字。这样的枚举类型定义更加简洁,并且易于扩展和修改。例如:

    type WeekDay int
    
    const (
    	Sunday    WeekDay = iota // 0
    	Tuesday                  // 1
    	Wednesday                // 2
    	Thursday                 // 3
    	Friday                   // 4
    	Saturday                 // 5
    	Monday                   // 6
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    如果想了解更详细的枚举用法,可前往 Go 语言中没有枚举类型,但是我们可以这样做 进行阅读。

    表达式计算

    通过在常量声明中使用 iota,可以创建复杂的表达式,并在每个常量声明中根据需要调整 iota 的值。这样可以轻松地生成一组具有特定规律的常量。例如:

    const (
    	_  = iota
    	KB = 1 << (10 * iota) // 1 << (10 * 1) = 1024B = 1KB
    	MB = 1 << (10 * iota) // 1 << (10 * 2) = 1048576B = 1MB
    	GB = 1 << (10 * iota) // 1 << (10 * 3) = 1073741824B = 1GB
    	TB = 1 << (10 * iota) // 1 << (10 * 4) = 1099511627776B = 1TB
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    位运算

    通过左移运算符(<<)与iota配合使用,方便地生成一组按位运算的常量。例如:

    const (
    	FlagNone  = 0         // 0
    	FlagRead  = 1 << iota // 1
    	FlagWrite             // 2
    	FlagExec              // 4
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    iota 的使用技巧和注意事项

    跳值使用

    我们可以使用 _ (下划线)来忽略某些值,例如:

    const (
    	Apple = iota // 0
    	_
    	Banana // 2
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5

    不同常量块,iota 是独立的

    iota 的作用范围是整个常量块,不同常量块的 iota 是独立的,每个常量块中的第一个 iota 的值都是 0。

    const (
    	A = iota // 0
    	B        // 1
    )
    
    const (
    	C = iota // 0
    	D        // 1
    )
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
  • 相关阅读:
    ssm小微企业人事管理系统的设计与实现毕业设计源码261630
    docker(4)-容器
    荐书 | 《幸福的陷阱》:幸福怎么是把双刃剑呢?
    .NET下数据库的负载均衡(有趣实验)
    【Tensorflow 2.12 电影推荐系统之召回模型】
    PHP-composer安装扩展安装,批量操作合并pdf
    Docker基础知识
    基于微信在线教育视频学习点播小程序系统设计与实现开题答辩PPT
    易点易动库存管理系统:革新企业库存管理,降本增效
    k8s配置configmap指定到容器的指定文件
  • 原文地址:https://blog.csdn.net/m0_73728511/article/details/133444716