Golang iota 标识符应用教程

iota 用于创建递增常量非常有用,但也有不适合的应用场景。本文介绍几个适合使用itoa的示例,同时也提醒一些场景小心使用。

基本iota 用法

首先我们从它的基本用法开始:

const (
StarHyperGiant = iota
StarSuperGiant
StarBrightGiant
StarGiant
StarSubGiant
StarDwarf
StarSubDwarf
StarWhiteDwarf
StarRedDwarf
StarBrownDwarf
)

上面代码定义了一组常量类型,初始值使用 itoa 标识符赋值,告诉Go编译器第一个常量从0开始,后续常量依次加一.

当const在声明块前出现时,会重置计数器为0。下面代码一组枚举自会从零到四重新赋值:

const (
    StarHyperGiant = iota
    StarSuperGiant
    StarBrightGiant
    StarGiant
    StarSubGiant
)
const (
    StarDwarf = iota
    StarSubDwarf
    StarWhiteDwarf
    StarRedDwarf
    StarBrownDwarf
)

修改缺省枚举类型

枚举常量默认为无类型整数,我们也可以使用其他数值类型覆盖缺省类型,请看示例:

const (
    StarDwarf byte = iota
    StarSubDwarf
    StarWhiteDwarf
    StarRedDwarf
    StarBrownDwarf
)

还可以指定任何数值类型,能表示整型或浮点类型。上面代码每个常量被声明为byte类型。

表达式中使用itoa

当itoa出现在表达式,实现机制和上面一致。编译器应用表达式对每个连续itoa增长值,下面代码给枚举成员赋偶数值:

const (
    StarHyperGiant = 2. 0*iota
    StarSuperGiant
    StarBrightGiant
    StarGiant
    StarSubGiant
)

输出结果如下:

StarHyperGiant = 0 [float64]
StarSuperGiant = 2 [float64]
StarBrightGiant = 4 [float64]
StarGiant = 6 [float64]
StarSubGiant = 8 [float64]

跳过枚举值

对于枚举常量赋值,我们还可以跳过某些值。给空标识符则跳过值,下面示例跳过0和64:

_ = iota // value 0
StarHyperGiant = 1 << iota
StarSuperGiant
StarBrightGiant
StarGiant
StarSubGiant
_ // value 64
StarDwarf
StarSubDwarf
StarWhiteDwarf
StarRedDwarf
StarBrownDwarf

因为我们跳过了0,首先第一个赋值常量从1开始。表达式 1<< iota 的结果为 1 << 1 = 2 ,第六个位置返回64,但该值被跳过,输出结果:

StarHyperGiant = 2
StarSuperGiant = 4
StarBrightGiant = 8
StarGiant = 16
StarSubGiant = 32
StarDwarf = 128
StarSubDwarf = 256
StarWhiteDwarf = 512
StarRedDwarf = 1024
StarBrownDwarf = 2048

我们再来一个示例:

const (
	_  = 1 << (iota * 10) // ignore the first value
	KB                    // decimal:       1024 -> binary 00000000000000000000010000000000
	MB                    // decimal:    1048576 -> binary 00000000000100000000000000000000
	GB                    // decimal: 1073741824 -> binary 01000000000000000000000000000000
)

输出结果为:

KB =  1024
MB =  1048576
GB =  1073741824

更疯狂的用法

我们也可以使用itoa配对给同一行的常量赋值,同时也可以使用下划线跳过配对中的值:

const (
	tomato, apple int = iota + 1, iota + 2
	orange, chevy
	ford, _
)

配对使用itoa对每一行进行计算:

tomato =  1, apple = 2
orange =  2, chevy = 3
ford   =  3

和所有编程语言一样,可以这么做,但并意味着就应该这么做。建议生产环境不要写这种让人迷惑的代码。

总结

本文通过示例介绍Golang 的itoa表示符的几种应用场景。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值