是否可以func (TheEnum) String() string在不在 Golang 中创建的情况下获得 Enum 名称?const ( MERCURY = 1 VENUS = iota EARTH MARS JUPITER SATURN URANUS NEPTUNE PLUTO)或者有没有办法动态定义常量?我发现了两种方式struct -based 和string -based,但两种方式都让我们重新输入每个标签 1 次(或复制粘贴和引用或使用编辑器的宏)
2 回答
30秒到达战场
TA贡献1828条经验 获得超6个赞
AFAIK,不,如果不将名称明确输入为字符串,您就无法做到这一点。但是你可以使用stringer工具从标准工具包来为你做它:
例如,给定这个片段,
package painkiller
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
运行这个命令
stringer -type=Pill
在同一目录中将创建文件pil_string.go,在包painkiller中,包含一个定义
func (Pill) String() string
建议与go generateGo 1.4+的命令一起使用。
catspeake
TA贡献1111条经验 获得超0个赞
作为补充:
在代码中使用下面的注释可以帮助go generate知道生成什么。注意,//和之间没有空格go:generate
//go:generate stringer -type=Pill
type Pill int
const (
Placebo Pill = iota
Aspirin
Ibuprofen
Paracetamol
Acetaminophen = Paracetamol
)
- 2 回答
- 0 关注
- 149 浏览
添加回答
举报
0/150
提交
取消