英文:
Is it possible to get Enum name without creating String() in Golang
问题
在Golang中,如果你不想创建func (TheEnum) String() string
函数,是否有可能获取枚举名称?
const (
MERCURY = 1
VENUS = iota
EARTH
MARS
JUPITER
SATURN
URANUS
NEPTUNE
PLUTO
)
或者是否有一种在运行时定义常量的方法?我找到了两种方法,一种是基于结构体的方法,另一种是基于字符串的方法,但这两种方法都需要我们额外输入每个标签一次(或者复制粘贴并引用,或者使用编辑器的宏)。
英文:
Is it possible to get Enum name without creating func (TheEnum) String() string
in Golang?
const (
MERCURY = 1
VENUS = iota
EARTH
MARS
JUPITER
SATURN
URANUS
NEPTUNE
PLUTO
)
or is there a way to define constants on the fly?
I found two ways struct-based and string-based, but both way make us retype each labels 1 more time (or copy-paste and quoting or using editor's macro)
答案1
得分: 21
据我所知,如果不显式将名称作为字符串输入,是无法实现这一点的。但是你可以使用标准工具包中的stringer
工具来帮助你完成:
例如,给定以下代码片段:
package painkiller
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
在相同的目录下运行以下命令:
stringer -type=Pill
将会生成一个名为pill_string.go
的文件,位于painkiller
包中,其中包含以下定义:
func (Pill) String() string
推荐在Go 1.4+中与go generate
命令一起使用。
英文:
AFAIK, no you can't do that without explicitly typing the name as a string. But you can use the stringer
tool from the standard tools package to do it for you:
>For example, given this snippet,
>
package painkiller
>
type Pill int
>
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
>running this command
>
stringer -type=Pill
>in the same directory will create the file pill_string.go, in package painkiller, containing a definition of
>
func (Pill) String() string
This is recommended to use with the go generate
command of Go 1.4+.
答案2
得分: 1
作为补充:
在代码中使用以下注释可以帮助go generate
知道要生成什么。
注意,在//
和go:generate
之间没有空格。
//go:generate stringer -type=Pill
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
英文:
As a supplement:
Use the following comment in the code can help go generate
know what to generate.
Be careful, there is no space between //
and go:generate
//go:generate stringer -type=Pill
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论