Go iota是一个比较奇怪的存在,它只能用在const的申明中,是一个从0开始的行数索引器。
看代码
package main import ( "fmt" ) const ( i = iota j = iota k l ) func main() { fmt.Println("i=", i) fmt.Println("j=", j) fmt.Println("k=", k) fmt.Println("l=", l) }
输出结果:
i= 0
j= 1
k= 2
l= 3
前两个数理解起来比较容易,iota的值是在const声明中的从0开始的行数。所有第一行值为0,第二行值为1
第三个和第四个,其实是go中声明const时的缩略写法,表示值和它前面表达式等号右边的值是一样的,完整写法是:
const (
i = iota
j = iota
k= iota
l = iota
)
这样的话,输出结果就很好理解了。
如果改一下,给const k赋值:
const ( i = iota j = iota k = 0 l ) func main() { fmt.Println("i=", i) fmt.Println("j=", j) fmt.Println("k=", k) fmt.Println("l=", l) }
则输出结果是:
i= 0
j= 1
k= 0
l= 0
再改一下:
const i = iota
const j = iota
func main() {
fmt.Println("i=", i)
fmt.Println("j=", j)
}
输出结果:
i= 0
j= 0
这表明iota的行记数,只在当前const内生效。