Go中的iota用于在const常量声明中定义递增的数字。
iota
的发音是/īˈōdə/
,是希腊字母表的第9个字母。
至于Go为什么选择这个,来源很少,据说Scheme里面也用这个。
iota的几个特性
- 仅用于常量声明中
- 一个从0开始的递增数值计数器,步长为1
- 在每次const出现时重新计数,即重置为0
- 可用于表达式中,作为子表达式使用
何时递增?
iota将在每个const定义行之后增加1。
- 当然,空行、注释都不算一行
- 多个用逗号分隔的常量只算一行
- 表达式中没有iota的行也算一行
如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
|
上述代码将输出:0 2 3 3 4
。
不管const定义行中有没有iota,仍然会递增:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
上述代码将输出:5 1 2
。
const 表达式的省略
const常量之后的表达式默认自动使用上一次的表达式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
上面代码中,后面的B,C,D,E
的值都是表达式:iota
。
代码将输出:0 1 2 3 4
。
复杂表达式
iota不只是可以单独使用,它还可以作为(子)表达式用于书写复杂的表达式。
如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
由于省略,B,C,D,E
的表达式也都为iota * 3
。
iota的值依次为:0
,1
,2
,3
,4
。所以,A,B,C,D,E
将依次为:0
,3
,6
,9
,12
。
一些用法示例
星期
1 2 3 4 5 6 7 8 9 |
|
存储大小
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|