将字符串解析为枚举的最佳方法

Best way to parse a string to an enum

我有一个枚举如下

type Capability int

const (
    Read   Capability = iota // Read   = 0
    Create                   // Create = 1
    Update                   // Update = 2
    Delete                   // Delete = 3
    List                     // List   = 4
)

我希望能够从枚举中获取字符串表示形式以及解析字符串以获取枚举。

我从枚举中获取字符串如下。


capabilityStrs := []string{"read", "create", "update", "delete", "list"}
func (c Capability) String() string {
    return capabilityStrs[c]
}

如何将字符串解析为枚举,以便调用 ParseSTring("read") gives me Read`。解决此问题的最佳方法是什么?

虽然定义 'best way' 的内容像@inian 所说的那样可靠,但以下是一种方法

type Capability string

const (
    Read   Capability = "READ"
    Create Capability = "CREATE"
    Update Capability = "UPDATE"
    Delete Capability = "DELETE"
    List   Capability = "LIST"
)

func (c Capability)String()string{
    return string(c)
}

func ParseCapability(s string)(c Capability,err error){
    capabilities := map[Capability]struct{}{
        Read: {},
        Create: {},
        Update: {},
        Delete: {},
        List: {},
    }

    cap := Capability(s)
    _,ok := capabilities[cap]
    if !ok{
        return c,fmt.Errorf(`cannot parse:[%s] as capability`,s)
    }
    return cap,nil
}

根据@super

的评论回答
capabilitiesMap := map[string]Capability{
        "read":   Read,
        "create": Create,
        "update": Update,
        "delete": Delete,
        "list":   List,
    }
func ParseString(str string) (Capability, bool) {
    c, ok := capabilitiesMap[strings.ToLower(str)]
    return c, ok
}