是否可以在Golang中创建func (TheEnum) String() string
来获取枚举名称?
const (
MERCURY = 1
VENUS = iota
EARTH
MARS
JUPITER
SATURN
URANUS
NEPTUNE
PLUTO
)
还是有办法动态定义常量? 我找到了基于struct和string的两种方式,但这两种方式都让我们重新键入每个标签1次(或复制粘贴和引用或使用编辑器的宏)
答案 0 :(得分:19)
AFAIK,如果没有明确地将名称键入字符串,你就不能这样做。但您可以使用标准工具包中的stringer
tool为您执行此操作:
例如,给定此代码段,
package painkiller type Pill int const ( Placebo Pill = iota Aspirin Ibuprofen Paracetamol Acetaminophen = Paracetamol )
运行此命令
stringer -type=Pill
在同一目录下将在painkiller包中创建文件pill_string.go,其中包含
的定义func (Pill) String() string
建议使用Go 1.4 +的go generate
命令。
答案 1 :(得分:1)
作为补充:
在代码中使用以下注释可以帮助go generate
知道生成什么。
请注意,//
和go:generate
之间没有空格
//go:generate stringer -type=Pill
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)