通常人们认为iota就是0,其实并非如此。
确切的说,当iota在紧跟着关键字const的第一行出现时,iota为0,在第二行出现时,iota为1,以此类推;当iota再次遇到const时,重置为0.
golang spec关于iota的说明:http://golang.org/ref/spec#Iota
下面来看几段代码吧。
1、例1
package main
import "fmt"
const i1 = iota
const j1 = iota
const k1 = iota
func main() {
fmt.Println("i1, j1, k1", i1, j1, k1)
fmt.Println("Hello, playground")
}
http://play.golang.org/p/LQEyApa6dq
输出:
i1, j1, k1 0 0 0
2、例2
package main
import "fmt"
const (
i1 = iota
j1 = iota
k1 = iota
)
func main() {
fmt.Println("i1, j1, k1", i1, j1, k1)
fmt.Println("Hello, playground")
}
输出:
i1, j1, k1 0 1 2
http://play.golang.org/p/gVhf2oC3Y4
这是我们最常使用的例子。
3、例3
package main
import "fmt"
const (
i1, j1,k1 = iota, iota, iota
)
func main() {
fmt.Println("i1, j1, k1", i1, j1, k1)
fmt.Println("Hello, playground")
}
http://play.golang.org/p/W1-umpoOwS
输出:
i1, j1, k1 0 0 0
这个例子中,由于iota在同一行,因此,只计算一次,就是0
4、例4
package main
import "fmt"
const (
i1 = -1
j1 = iota
k1
)
func main() {
fmt.Println("i1, j1, k1", i1, j1, k1)
fmt.Println("Hello, playground")
}
http://play.golang.org/p/C8ff8k1JAS
输出:
i1, j1, k1 -1 1 2
在这个例子中,由于iota在const的第二行出现,因此是1,这是最常犯的错误!!!