go语言中预置了一个预定义常量 iota
这个东西有个很奇怪的特性,会根据 const 关键字改变值
默认的,iota在const出现的时候会初始化为0,而后不断递加1,直到出现第二个const关键字
const ( countagn1 = 2 << iota // 2 0 countagn2 = 2 << iota // 4 2 countagn3 = 2 << iota // 8 6 ) // 00010 上面的计算结果:iota 不是递加然后加上常量值,而是递加位数,在常量值的二进制数位基础上左移 const ( countagn4 = 3 << iota // 3 0 3*2^0 countagn5 = 3 << iota // 6 1 3*2^1 countagn6 = 3 << iota // 12 2 3*2^2 ) // 00011 所以,口算iota的计算结果,直接在iota的基础上乘以2的iota次方 func main(){ fmt.Println("countagn1",countagn1) fmt.Println("countagn2",countagn2) fmt.Println("countagn3",countagn3) fmt.Println("countagn4",countagn4) fmt.Println("countagn5",countagn5) fmt.Println("countagn6",countagn6) } // OUT countagn1 2 countagn2 4 countagn3 8 countagn4 3 countagn5 6 countagn6 12
结论都写在代码里了,iota对常量的影响并不是相加,而是在常量的二进制数值上进行对应的位移(>>也是可以的),那么由于二进制的表示方式,每位移一次,就是乘以2,所以,常量会以2的iota次方变化。
原文:https://www.cnblogs.com/haiton/p/10480473.html