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

时间:2011-08-04 07:31:20

标签: enums go

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

3 个答案:

答案 0 :(得分:13)

const

const (
    pi = 3.14
    foo = 42
    bar = "hello"
)

答案 1 :(得分:12)

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

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

type MyFlag int

const (
    Foo MyFlag = 1
    Bar
)

FooBar的类型为MyFlag。如果要从MyFlag中提取int值,则需要类型coersion:

var i int = int( Bar )

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

const (
    Foo = 1
    Bar = 2
)

FooBar是可以分配给int,float等的完美常量。

“常量”部分的Effective Go中介绍了这一点。另请参阅iota关键字对C / C ++等值的自动赋值的讨论。

答案 2 :(得分:5)

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

type PoiType string

const (
    Camping            PoiType = "Camping"
    Eatery             PoiType = "Eatery"
    Viewpoint          PoiType = "Viewpoint"
)