Go iota是一個比較奇怪的存在,它只能用在const的申明中,是一個從0開始的行數索引器。spa
看代碼code
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) }
輸出結果:blog
i= 0索引
j= 1io
k= 2class
l= 3import
前兩個數理解起來比較容易,iota的值是在const聲明中的從0開始的行數。全部第一行值爲0,第二行值爲1im
第三個和第四個,實際上是go中聲明const時的縮略寫法,表示值和它前面表達式等號右邊的值是同樣的,完整寫法是:tab
const (di
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內生效。