Go语言数据类型之特殊常量iota的使用
iota在const关键字出现时将被重置为0
package main
import "fmt"
const a = iota
const b = iota
func main() {
fmt.Print(a) // 0
fmt.Print("n")
fmt.Print(b) // 0
}
const中每新增一行常量声明将使iota计数一次
package main
import "fmt"
const (
a = iota
b = iota
)
func main() {
fmt.Print(a) // 0
fmt.Print("n")
fmt.Print(b) // 1
}
iota常见使用法
跳值使用法
package main
import "fmt"
const (
a = iota
b = iota
_ // 跳值
c = iota
)
func main() {
fmt.Print(a) // 0
fmt.Print("n")
fmt.Print(b) // 1
fmt.Print("n")
fmt.Print(c) // 3
}
插队使用法
package main
import "fmt"
const (
a = iota
b = 3.25 // 插队
c = iota
)
func main() {
fmt.Print(a) // 0
fmt.Print("n")
fmt.Print(b) // 3.25
fmt.Print("n")
fmt.Print(c) // 2
}
表达式隐式使用法
package main
import "fmt"
const (
a = iota * 2
b // 常量未使用表达式时,它会隐式继承前一个非空表达式 iota值为1 1 * 2
c // 常量未使用表达式时,它会隐式继承前一个非空表达式 iota值为2 2 * 2
)
func main() {
fmt.Print(a) // 0
fmt.Print("n")
fmt.Print(b) // 2
fmt.Print("n")
fmt.Print(c) // 4
}
单行使用法(iota 在同一行值是不加的)
package main
import "fmt"
const (
a,b = iota, iota 3
c,d
f = iota
//如果不给e赋值,则沿用上一个非空表达式格
e //格式错误
h,k //格式正确
)
func main() {
fmt.Print(a) // 0
fmt.Print("n")
fmt.Print(b) // 3
fmt.Print("n")
fmt.Print(c) // 1 c引用的是a的表达式,d引用的是b的表达式
fmt.Print("n")
fmt.Print(d) // 4
fmt.Print("n")
fmt.Print(f) // 2 iota 恢复记值
fmt.Print("n")
}