GO中自定义类型的ENUM

Ben*_*ish 4 enums go iota

我正在尝试为我定义的类型生成枚举

type FeeStage int
Run Code Online (Sandbox Code Playgroud)

这个我知道,我可以用丝毫基于这种类型来创建一个枚举

const(
     Stage1 FeeStage = iota
     Stage2 
     Stage3
)
Run Code Online (Sandbox Code Playgroud)

但是,操纵枚举的实际值是相当麻烦且容易出错的

const(
     Stage1 FeeStage = iota           // 0
     Stage2          = iota + 6       // 7
     Stage3          = (iota - 3) * 5 // -5
)
Run Code Online (Sandbox Code Playgroud)

有没有办法自动将带有自定义值的ENUM列表转换为某种类型.这是我以前使用的,但只将常量的第一个成员转换为自定义类型.

const(
     Stage1 FeeStage = 1
     Stage2          = 2
     Stage3          = 2
)
Run Code Online (Sandbox Code Playgroud)

是一个结果相似的游乐场

Not*_*fer 6

没有办法超越使用iota和自动枚举,或做最直接的事情:

const(
     Stage1 FeeStage = 1
     Stage2 FeeStage = 2

     // or another syntax with same results
     Stage3 = FeeStage(2)
)
Run Code Online (Sandbox Code Playgroud)

恕我直言,比iota + 5你说的那样笨重的东西真的很糟糕.

我通常要么使用iota,如果值超出程序的上下文不重要,要么显式输入,如果我需要在协议或其他东西中使用的值.

虽然我不得不说有时只使用整数或字符串就足够了,但这取决于上下文.例如,请参阅标准库中http状态代码.它们没有特殊类型.