首页  >  文章  >  后端开发  >  在 Go 中将连续整数赋给常量时如何跳过 Iota 值?

在 Go 中将连续整数赋给常量时如何跳过 Iota 值?

DDD
DDD原创
2024-11-22 05:54:14864浏览

How Can I Skip Iota Values When Assigning Sequential Integers to Constants in Go?

在 Go 中使用 Iota 跳过常量值

在 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 和后续常量的值。

单组,自动Offset

为了在跳过值时保持单个常量组,请引入一个常量,其中中断应该发生并从下一行的 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn