Enums 从Go中的一组相关常量创建枚举
在Go语言中,对大量相关常量进行分组的首选(或正确)方法是什么?例如,C++和C++都有<代码>枚举> />代码。 < P>代码> constEnums 从Go中的一组相关常量创建枚举,enums,go,Enums,Go,在Go语言中,对大量相关常量进行分组的首选(或正确)方法是什么?例如,C++和C++都有枚举> />代码。 < P>代码> const const ( pi = 3.14 foo = 42 bar = "hello" ) 根据常数的使用方式,有两个选项 第一种方法是基于int创建一个新类型,并使用此新类型声明常量,例如: type MyFlag int const ( Foo MyFlag = 1 Bar ) Foo和Bar将具有类型MyFlag
const (
pi = 3.14
foo = 42
bar = "hello"
)
根据常数的使用方式,有两个选项 第一种方法是基于int创建一个新类型,并使用此新类型声明常量,例如:
type MyFlag int
const (
Foo MyFlag = 1
Bar
)
Foo
和Bar
将具有类型MyFlag
。如果要从MyFlag
提取int值,则需要类型协同:
var i int = int( Bar )
如果不方便,请使用newacct建议的裸常数块:
const (
Foo = 1
Bar = 2
)
Foo
和Bar
是可以分配给int、float等的完美常量
这将在常量部分中介绍。另请参见有关自动分配值(如C/C++)的
iota
关键字的讨论。这取决于您希望通过此分组实现什么。Go允许使用以下大括号语法进行分组:
const (
c0 = 123
c1 = 67.23
c2 = "string"
)
它只为程序员添加了漂亮的可视块(编辑器允许折叠它),但对编译器没有任何作用(不能为块指定名称)
唯一依赖于这个块的是in-Go(这对于枚举来说非常方便)。它允许您轻松创建自动增量(不仅仅是自动增量:链接中的更多内容)
例如:
const (
c0 = 3 + 5 * iota
c1
c2
)
将创建常量
c0=3
(3+5*0)、c1=8
(3+5*1)和c2=13
(3+5*2)。我最接近枚举的方法是将常量声明为一种类型。至少您有一些类型安全性,这是枚举类型的主要优点
type PoiType string
const (
Camping PoiType = "Camping"
Eatery PoiType = "Eatery"
Viewpoint PoiType = "Viewpoint"
)
这样的街区有名字吗?@Darius:没有:-(无论如何,这不是分组。如果您为所有常量指定相同的用户定义类型,则可以在某种意义上为块指定名称。有点像lnmx在MyFlag示例中尝试执行的操作。这不太正确。在第一个示例中,条形图是非类型化的。只有在赋值右侧为空时,它才会选择Foo的类型。您是对的o在这种情况下使用iota。@Evan更正了,谢谢。我在发布答案之前测试了我的示例,但不知何故,额外的赋值突然出现在那里。我不确定你是否有意,但现在它们具有相同的值和类型。“只有在赋值的右侧为空时,才会选择Foo的类型。”-刚被那玩意咬了一口。强调一下,让其他人注意到。