```go
const (
mutexLocked = 1 << iota // mutex is locked
mutexWoken
mutexStarving
mutexWaiterShift = iota
)
func main() {
fmt.Println("mutexLocked的值",mutexLocked)
fmt.Println("mutexWoken的值",mutexWoken)
fmt.Println("mutexStarving的值",mutexStarving)
fmt.Println("mutexWaiterShift的值",mutexWaiterShift)
//为什么结果是:
mutexLocked的值 1
mutexWoken的值 2
mutexStarving的值 4
mutexWaiterShift的值 3
}
```
不是很明白
- 这个属于`Golang基础`,也是常被多数开发者忽略的方面,解释如下
```go
mutexLocked = 1 << iota = 1 << 0 = 1 * 2的0次方 = 1
mutexWoken = 1 << iota = 1<< 1 = 1 * 2的1次方= 2
mutexStarving = 1 << iota = 1 << 2 = 1 * 2的2次方 = 4
mutexWaiterShift = iota = 3
```
- 具体可以查阅以下文章
[Go101 - 常量和变量 - 在常量声明中使用iota](https://gfw.go101.org/article/constants-and-variables.html)
> iota是Go中预声明(内置)的一个特殊的有名常量。 iota被预声明为0,但是它的值在编译阶段并非恒定。 当此预声明的iota出现在一个常量声明中的时候,它的值在第n个常量描述中的值为n(从0开始)。 所以iota只对含有多个常量描述的常量声明有意义。
#1