Skip to main content
 首页 » 编程设计

Golang iota 标识符应用教程

2022年07月19日127mq0036

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表示符的几种应用场景。


本文参考链接:https://blog.csdn.net/neweastsun/article/details/120588797
阅读延展