Golang——枚举(iota)的使用

Golang——枚举(iota)的使用,第1张

枚举就是将数据值一一列出来,枚举可以用来表示一些固定的值,枚举是常量组成的。在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)
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/994191.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-21
下一篇 2022-05-21

发表评论

登录后才能评论

评论列表(0条)

保存