go 语言学习笔记 0001 > iota

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