Golang 常量使用iota
2020-03-30 本文已影响0人
Avery_up
基本概念
- iota是Go语言的常量计数器,只能在常量的表达式中使用。
- iota默认值为0,在且仅在const关键字出现时将被重置为0。
- const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。
- 使用iota能简化定义,在定义枚举时很有用。
- const: 分组声明时,第一个常量必须设置值。第二个及后续的常量未设置值时,将被默认设置为他前面那个常量的表达式。如果那个常量的值为iota,则它也被设置为iota。
示例
iota只能在常量的表达式中使用
fmt.Println(iota)
// 编译错误: undefined: iota
iota从0开始,每新增一行计数加一
const (
Sunday = iota // 0
Monday // 1
Tuesday // 2
Wednesday // 3
Thursday // 4
Friday // 5
Saturday // 6
)
在const关键字出现时被重置为0
const a = iota // a = 0
const (
b = iota // b = 0
c // c = 1 相当于c = iota
d = iota // d = 2 在同一个const中,d=iota不会重置计数器
e // e = 3
)
表达式
type ByteSize float64
const (
_ = iota // ignore first value by assigning to blank identifier
KB ByteSize = 1 << (10 * iota) // 1 << (10*1)
MB // 1 << (10*2)
GB // 1 << (10*3)
TB // 1 << (10*4)
PB // 1 << (10*5)
EB // 1 << (10*6)
ZB // 1 << (10*7)
YB // 1 << (10*8)
)
一行定义多个常量
iota 在下一行增长,而不是本行立即取得它的引用。
const (
// iota = 0
// Apple = iota + 1 = 1
// Banana = iota + 2 = 2
Apple, Banana = iota + 1, iota + 2
// iota = 1
// Cherimoya = iota + 1 = 2
// Durian = iota + 2 = 3
Cherimoya, Durian
// iota = 2
// Elderberry = iota + 1 = 3
// Fit = iota + 2 = 4
Elderberry, Fig
)
中间插队
同一个const中,中间插队不会打乱iota计数器。
const (
h = iota // 0
i = 100 // 100
j // 100, 延续上一个表达式
k = iota // 3, iota可理解为行索引,此时计数为3
l // 4
)
跳过值
在新行使用 _ ,跳过一次计数。
type Color float64
const (
RED Color = iota // 0
ORANGE // 1
YELLOW // 2
GREEN // 3
_
_
BLUE // 6
INDIGO // 7
VIOLET // 8
)