是否可以在不创建 String() 的情况下获取枚举名称



是否可以在不创建 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
)

相关内容

  • 没有找到相关文章

最新更新