是否可以在Golang中创建Enum名称而不创建String()

时间:2014-11-28 10:53:08

标签: enums go

是否可以在Golang中创建func (TheEnum) String() string来获取枚举名称?

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

还是有办法动态定义常量? 我找到了基于structstring的两种方式,但这两种方式都让我们重新键入每个标签1次(或复制粘贴和引用或使用编辑器的宏)

2 个答案:

答案 0 :(得分:19)

AFAIK,如果没有明确地将名称键入字符串,你就不能这样做。但您可以使用标准工具包中的stringer tool为您执行此操作:

  

例如,给定此代码段,

package painkiller

type Pill int

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

运行此命令

stringer -type=Pill
     

在同一目录下将在painkiller包中创建文件pill_string.go,其中包含

的定义
func (Pill) String() string

建议使用Go 1.4 +的go generate命令。

答案 1 :(得分:1)

作为补充:
在代码中使用以下注释可以帮助go generate知道生成什么。 请注意,//go:generate之间没有空格

//go:generate stringer -type=Pill
type Pill int

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