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
)