从Go中的一组相关常量创建枚举

Dar*_*kas 18 enums go

什么是在Go语言中对大量相关常量进行分组的首选(或右)方法?例如,C#和C++都有enum这个.

new*_*cct 14

const

const (
    pi = 3.14
    foo = 42
    bar = "hello"
)
Run Code Online (Sandbox Code Playgroud)

  • @Darius:不:-(无论如何,这不是分组。 (3认同)
  • 这样的街区有名字吗? (2认同)

lnm*_*nmx 14

有两种选择,具体取决于常量的使用方式.

第一种是基于int创建一个新类型,并使用这个新类型声明你的常量,例如:

type MyFlag int

const (
    Foo MyFlag = 1
    Bar
)
Run Code Online (Sandbox Code Playgroud)

Foo并且Bar将有类型MyFlag.如果要从a中提取int值MyFlag,则需要类型coersion:

var i int = int( Bar )
Run Code Online (Sandbox Code Playgroud)

如果这样不方便,请使用newacct建议的裸const块:

const (
    Foo = 1
    Bar = 2
)
Run Code Online (Sandbox Code Playgroud)

Foo并且Bar是可以分配给int,float等的完美常量.

这在Constants部分的Effective Go中有所介绍.另请参阅iota关于自动赋值(如C/C++)的关键字的讨论.

  • **"如果任务的右侧是空白的话,它只会选择Foo的类型."** - 刚被这个问题所困扰.这里强调其他人注意到它. (3认同)
  • 这不是很正确。在您的第一个示例中,未键入Bar。如果作业的右侧为空白,则只会选择Foo的类型。在这种情况下,使用iota是正确的。 (2认同)

Pep*_*ter 7

我最接近枚举的方法是将常量声明为类型。至少您有一些类型安全性,这是枚举类型的主要特权。

type PoiType string

const (
    Camping            PoiType = "Camping"
    Eatery             PoiType = "Eatery"
    Viewpoint          PoiType = "Viewpoint"
)
Run Code Online (Sandbox Code Playgroud)