如何在 Go 中使用 enum?

一般利用 iota 来设置 enum。

引用自语言规范 : iota

在常量声明中,预先声明的标识符 iota 表示连续的无类型整数常量。 每个 const 的声明内,iota 都会先被重置为 0,并在每个 ConstSpec (组内常量)之后递增。 它可以用来构造一组相关的常量:

const (  // iota 重置为 0
        c0 = iota  // c0 == 0
        c1 = iota  // c1 == 1
        c2 = iota  // c2 == 2
)

const (
        a = 1 << iota  // a == 1 ( iota 重置为 0)
        b = 1 << iota  // b == 2
        c = 1 << iota  // c == 4
)

const (
        u         = iota * 42  // u == 0     (untyped integer 常量)
        v float64 = iota * 42  // v == 42.0  (float64 常量)
        w         = iota * 42  // w == 84    (untyped integer 常量)
)

const x = iota  // x == 0 (iota 重置为 0)
const y = iota  // y == 0 (iota 重置为 0)

在多个 const 声明中,每个 iota 的值都相同,因为它仅在每个 ConstSpec 之后递增

const (
        bit0, mask0 = 1 << iota, 1<<iota - 1  // bit0 == 1, mask0 == 0
        bit1, mask1                           // bit1 == 2, mask1 == 1
        _, _                                  // 跳过 iota == 2
        bit3, mask3                           // bit3 == 8, mask3 == 7
)

可以用下划线 _ 跳过不想要的值。


可以这样

const (
        A = iota
        C
        T
        G
)

或者

type Base int

const (
        A Base = iota
        C
        T
        G
)

引入一个有别于 int 的类型。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://stackoverflow.com/questions/1442...

译文地址:https://learnku.com/go/t/61329

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!