在Go语言中对大量相关常量进行分组的首选(或正确)方式是什么?例如,C#和C ++都有enum
。
答案 0 :(得分:13)
const
?
const (
pi = 3.14
foo = 42
bar = "hello"
)
答案 1 :(得分:12)
有两种选择,具体取决于常量的使用方式。
第一种是基于int创建一个新类型,并使用这种新类型声明你的常量,例如:
type MyFlag int
const (
Foo MyFlag = 1
Bar
)
Foo
和Bar
的类型为MyFlag
。如果要从MyFlag
中提取int值,则需要类型coersion:
var i int = int( Bar )
如果这样不方便,请使用newacct建议的裸const块:
const (
Foo = 1
Bar = 2
)
Foo
和Bar
是可以分配给int,float等的完美常量。
“常量”部分的Effective Go中介绍了这一点。另请参阅iota
关键字对C / C ++等值的自动赋值的讨论。
答案 2 :(得分:5)
我最接近枚举的方法是将常量声明为一种类型。至少你有一些类型安全性,这是枚举类型的主要特权。
type PoiType string
const (
Camping PoiType = "Camping"
Eatery PoiType = "Eatery"
Viewpoint PoiType = "Viewpoint"
)