douya7309 2014-11-28 10:53
浏览 557
已采纳

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

Is it possible to get Enum name without creating func (TheEnum) String() string in Golang?

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

or is there a way to define constants on the fly? I found two ways struct-based and string-based, but both way make us retype each labels 1 more time (or copy-paste and quoting or using editor's macro)

  • 写回答

1条回答 默认 最新

  • doufangpian5545 2014-11-28 10:59
    关注

    AFAIK, no you can't do that without explicitly typing the name as a string. But you can use the stringer tool from the standard tools package to do it for you:

    For example, given this snippet,

    package painkiller
    
    type Pill int
    
    const (
        Placebo Pill = iota
        Aspirin
        Ibuprofen
        Paracetamol
        Acetaminophen = Paracetamol
    )
    

    running this command

    stringer -type=Pill
    

    in the same directory will create the file pill_string.go, in package painkiller, containing a definition of

    func (Pill) String() string
    

    This is recommended to use with the go generate command of Go 1.4+.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?