一尘不染

在Golang中不创建String()就能获取枚举名称吗

go

是否可以func (TheEnum) String() string在Golang中创建而不获取Enum名称?

const (
 MERCURY = 1
 VENUS = iota
 EARTH
 MARS
 JUPITER
 SATURN
 URANUS
 NEPTUNE
 PLUTO
)

还是有一种动态定义常量的方法?我发现了基于结构和基于字符串的两种方式,但是两种方式都使我们再次键入每个标签1次(或者复制粘贴,引用或使用编辑器的宏)。


阅读 521

收藏
2020-07-02

共1个答案

一尘不染

AFAIK,不,如果不明确输入名称作为字符串,您将无法做到这一点。但是你可以使用stringer工具从标准工具包来为你做它:

例如,鉴于此片段,

package painkiller

type Pill int

const (
    Placebo Pill = iota
    Aspirin
    Ibuprofen
    Paracetamol
    Acetaminophen = Paracetamol
)

运行此命令

stringer -type=Pill

在同一目录下,将在package painkiller中创建文件pill_string.go,其中包含以下内容的定义:

func (Pill) String() string

建议与go generateGo 1.4+ 的命令一起使用。

2020-07-02