为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 Golang 中不创建 String() 的情况下获取 Enum 名称

是否可以在 Golang 中不创建 String() 的情况下获取 Enum 名称

Go
莫回无 2021-09-09 13:48:42
是否可以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+的命令一起使用。


查看完整回答
反对 回复 2021-09-09
?
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

)


查看完整回答
反对 回复 2021-09-09
  • 2 回答
  • 0 关注
  • 149 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信