Go iota 实现枚举
iota 实现枚举常量
const
语法提供了“隐式重复前一个非空表达式”的机制:
const (
a, b = 1, 2
c, d
e, f
)
fmt.Println(c, d) // 1 2
fmt.Println(e, f) // 1 2
// https://go.dev/play/p/IZ9OmeHyZb3
iota
是 Go 的一个预定义标识符,它表示 const
声明块(包括单行声明)中每个常量所处位置(相对于当前块的行号)在块中的偏移量(偏移量从 0 开始)。每一行的 iota
自身是无类型常量,可以像无类型常量那样参与不同类型的求值过程,无须对其进行显式类型转换。位于同一行的 iota
即便出现多次,值也是相同的。
const (
mutexLocked = 1 << iota // 1 << 0
mutexWoken // 1 << 1
mutexStarving // 1 << 2
mutexWaiterShift = iota // 3
starvationThresholdNs = 1e6
)
// 略过一些值
const (
_ = iota
Pin1 // 1
_
pin3 // 3
)
// 定义浮点型枚举常量
const (
PI = 3.1415926
PI_2 = 3.1415926 / (2 * iota) // iota 是 1
PI_4 = 3.1415926
)
// 自定义类型枚举常量
type Weekday int
const (
Sunday Weekday = iota
Monday
)