go语言iota有点奇怪,看下面代码:
package main
import (
"fmt"
)
const (
TestMin = -1
TestA
TestB = iota
TestC
)
func main() {
fmt.Printf("TestMin:%d\n", TestMin)
fmt.Printf("TestA:%d\n", TestA)
fmt.Printf("TestB:%d\n", TestB)
fmt.Printf("TestC:%d\n", TestC)
}
上面代码的执行结果是什么呢?
结果是这样的,看到结果,对iota的用法就基本掌握了:
/*
TestMin:-1
TestA:-1
TestB:2
TestC:3
*/
再来看一例:
package main
import (
"fmt"
)
const (
i=1<<iota
j=3<<iota
k
l
)
func main() {
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
}
执行结果:
i= 1
j= 6
k= 12
l= 24
k等于12,l等于24是如何得出来的呢?
i=1<<iota
j=3<<iota
k
l
也就是
i=1<<0
j=3<<1
k=3<<2
l=3<<3
iota每出现一次,自动加1;而前面的操作数如果不指定,默认使用上一个的,在这里是3;
有疑问加站长微信联系(非本文作者)