在 Go 中,iota 是一个特殊常量,用于将连续整数分配给内部的枚举常量一个常数组。然而,有时需要跳过将 iota 值分配给某些常量。这里有三种方法:
如果常量在同一组内,您可以用常量手动移动 iota,留下您想要跳过的那些常量的空初始化表达式:
const ( APPLE = iota ORANGE PEAR BANANA = iota + 96 // 96 is added manually to get 99 GRAPE ) fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
此方法将产生所需的输出:0, 1, 2, 99, 100。但是,改变顺序或在 BANANA 之前插入新常量会影响 BANANA 及后续常量的值。
为了避免意外的值变化,请打破常量组并开始新的一:
const ( APPLE = iota ORANGE PEAR ) const ( BANANA = iota + 99 // Iota resets to 0 GRAPE ) fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
这也会产生相同的输出,并且在 BANANA 之前插入新常量不会影响 BANANA 和后续常量的值。
为了在跳过值时保持单个常量组,请引入一个常量,其中中断应该发生并从下一行的 iota 中减去它的值:
const ( APPLE = iota ORANGE PEAR _BREAK BANANA = iota - _BREAK + 98 // Continues from 98 + 1 = 99 GRAPE ) fmt.Println(APPLE, ORANGE, PEAR, BANANA, GRAPE)
这种方法确保在 BANANA 之前更改顺序或插入新常量不会影响 BANANA 和后续常量的值。为了简化偏移量计算,_BREAK 可以用 iota 1 初始化,因此应用于下一个常量的偏移量就是 _BREAK 本身的值:
const ( APPLE = iota ORANGE PEAR _BREAK = iota + 1 BANANA = iota - _BREAK + 99 // Continues from 99 GRAPE )
以上是在 Go 中将连续整数赋给常量时如何跳过 Iota 值?的详细内容。更多信息请关注PHP中文网其他相关文章!