在 Go 中表示枚举的惯用方式是什么?

在 Go 中表示枚举的惯用方式是什么?,第1张

在 Go 中表示枚举的惯用方式是什么?

引用语言规范:Iota

常量声明中,预先声明的标识符 iota 表示连续的无类型整数常量。每当保留字 const 出现在源中并在每个 ConstSpec 之后递增时,它就会重置为 0。它可以用来构造一组相关的常量:

const (  // iota is reset to 0        c0 = iota  // c0 == 0        c1 = iota  // c1 == 1        c2 = iota  // c2 == 2)const (        a = 1 << iota  // a == 1 (iota has been reset)        b = 1 << iota  // b == 2        c = 1 << iota  // c == 4)const (        u         = iota * 42  // u == 0     (untyped integer constant)        v float64 = iota * 42  // v == 42.0  (float64 constant)        w         = iota * 42  // w == 84    (untyped integer constant))const x = iota  // x == 0 (iota has been reset)const y = iota  // y == 0 (iota has been reset)

在 expressionList 中,每个 iota 的值都是相同的,因为它仅在每个 ConstSpec 之后递增:

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

最后一个示例利用了最后一个非空表达式列表的隐式重复。


所以你的代码可能像

const (        A = iota        C        T        G)

或者

type base intconst (        A base = iota        C        T        G)

如果您希望基数成为与 int 不同的类型。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5618211.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存