将字符串解析为枚举的最佳方法
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
}
我有一个枚举如下
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
}