枚举就是将数据值一一列出来,枚举可以用来表示一些固定的值,枚举是常量组成的。在Go中没有枚举的特定方法,但是可以通过iota实现功能。
iota:
iota是Go语言的常量计数器,const出现时, 会将iota初始化为0,const中每新增一行iota就会计数一次,递增默认数据类型为intiota可以配合枚举使用
iota可以持续递增
func test13() {
const (
a = iota // 第一行 重置为0 a:0
b // 第二行 新增1行 b:1
c // 第三行 新增1行 c:2
)
fmt.Println(a, b, c)
}
如果中断iota递增,必须再次遇到iota才会恢复按行递增,否则将沿用上一次取值
func test14() {
const (
a = 1 + iota // 第0行 重置为0 a = 1 + 0
b // 第1行 新增1行 b = 1 + 1
c // 第2行 新增1行 c = 1 + 2
d = 4 // 第3行 新增1行 d = 4
e // 第4行 新增1行 e = 4 与上一行常量右值表达式相同 f // 第5行 新增1行 f = 4 只要不遇到iota,就一直是上次赋值的值,就是4
g = iota // 第6行 重置为0 g = 6 这里遇到了iota,恢复iota自增,计数包括前面所有的常量
i // 第7行 新增1行 i = 7 接着g+1,如果再定义常量初始化,就还是和4一样循环
)
fmt.Println(a, b, c, d, e, f, g, i)
}
如果使用多个常量赋值的时候,后面的数据都会跟着第一行的格式走,直到下一个iota出现
func test15() {
const (
a, b = 1 + iota, 2 + iota // iota = 0 a = iota + 1 b = iota + 2 a = 1 ,b = 2
c, d // iota = 1 c = iota + 1 d = iota + 2 c = 2 ,d = 3
e, f // iota = 2 e = iota + 1 f = iota + 2 e = 3 ,f = 4
g, h = 3 + iota, 4 + iota // iota = 3 g = iota + 3 h = iota + 4 g = 6 ,h = 7
i, j // iota = 4 i = iota + 3 j = iota + 4 i = 7 ,j = 8
)
fmt.Println(a, b, c, d, e, f, g, h, i, j)
}
可以自定义类型来实现用途明确的枚举类型。但须注意,这并不能将取值限定在预定义的枚举常量值范围内。
func main() {
test(red)
test(100) // 100并未超出color/byte类型取值范围。
x := 2
test(x) // 错误:无法将 'x' (类型 int) 用作类型 color
}
type color byte // 自定义类型
const (
black color = iota // 指定常量类型
red
blue
)
func test(c color) {
fmt.Println(c)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)