iota 用于初始常量赋值,在赋值时每行的iota变量自动增加1。需要注意的是还存在某些特殊的规则。
案例1
package main
import "fmt"
const (
A = iota
B
C
D
E
)
func main() {
fmt.Printf("A: %d, B: %d, C: %d, D: %d, E: %d", A, B, C, D, E)
}
//输入:
//输出:A: 0, B: 1, C: 2, D: 3, E: 4
iota有cha插行时该行也要计数,如下例所示。
案例2
package main
import "fmt"
const (
A = iota
B = 10
C = iota
D
F
G
)
func main() {
fmt.Printf("A: %d, B: %d, C: %d, D: %d, F: %d, G: %d", A, B, C, D, F, G)
}
//输入:
//输出:: A: 0, B: 10, C: 2, D: 3, F: 4, G: 5
‘_’ 的使用类似于(_,v := map[key])中的 ‘_’ 会忽略该行的值,但其值也会自增1
案例3
package main
import "fmt"
const (
A = iota
B
_
C
D
)
func main() {
fmt.Printf("A: %d, B: %d, C: %d, D: %d", A, B, C, D)
}
//输入:
//输出:A: 0, B: 1, C: 3, D: 4
iota只会对上一行的数加一(无论上一行有几个值)
package main
import "fmt"
const (
A = iota
B, C = iota, iota
D = iota
F
)
func main() {
fmt.Printf("A: %d, B: %d, C: %d, D: %d, F: %d", A, B, C, D, F)
}
//输入:
//输出:A: 0, B: 1, C: 1, D: 2, F: 3
iota 在该行没有表达式时会沿用该行的表达式。
案例4
package main
import "fmt"
const (
A = iota
B
C = 12
D
F
)
func main() {
fmt.Printf("A: %d, B: %d, C: %d, D: %d, F: %d", A, B, C, D, F)
}
//输入:
//输出:A: 0, B: 1, C: 12, D: 12, F: 12