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