常量枚举(一组常量值)
-
在定义常量组时,可以使用枚举
-
iota是常量的计数器,从0开始,组中每定义1个常量自动递增1
-
go现在没有枚举,对于从0开始赋值的常量初始化,可以通过常量初始化规则与iota,达到枚举的效果
const (
Unknown = 0
Female = 1
Male = 2
)
const (
Unknown = iota //0
Female //1
Male //2
)
-
一个const声明的内部,每一行常量将会自动套用前面常量的数据类型,并自动增加值。这种模式有点类似于电子表格中的单元格自动填充
-
iota不仅只生成每次增加1的枚举值。我们还可以使用左移操作符,来做一些强大的枚举常量值生成器
const (
Readable = 1 << iota // 0001,1 << iot,每次左移一个二进制位
Writeable // 0010
Executable // 0100
)
package main
import "fmt"
const (
i = 1 << iota // i=1<<0,<<表示左移
j = 3 << iota
k
l
)
func main() {
fmt.Println("i=",i)
fmt.Println("j=",j)
fmt.Println("k=",k)
fmt.Println("l=",l)
}
- iota,特殊常量,可看作是一个能被编译器修改的常量。iota在每遇到一个const关键字时(const内部的第一行之前),将被重置为0。iota可理解为const()语句块中的行索引,const()中每新增一行声明,将使iota计数加1。
// 第一个iota等于0,每当iota在新的一行被使用时,它的值都会自动加1
const (
a = iota //0
b = iota //1
c = iota //2
)
所以a=0, b=1, c=2可以简写为如下形式
const (
a = iota //0
b //1
c //2
)
iota例子
package main
import "fmt"
func main() {
const (
a = iota //0
b //1
c //2
d = "ha" //独立值,iota += 1
e //"ha",iota += 1
f = 100 //独立值,iota +=1
g //100,iota +=1
h = iota //7,恢复计数
i //8
)
fmt.Println(a,b,c,d,e,f,g,h,i)
}