我有一个枚举如下
type Capability int
const (
Read Capability = iota // Read = 0
Create // Create = 1
Update // Update = 2
Delete // Delete = 3
List // List = 4
)
Run Code Online (Sandbox Code Playgroud)
我希望能够从枚举中获取字符串表示形式以及解析字符串以获取枚举。
我从枚举中获取字符串,如下所示。
capabilityStrs := []string{"read", "create", "update", "delete", "list"}
func (c Capability) String() string {
return capabilityStrs[c]
}
Run Code Online (Sandbox Code Playgroud)
如何将字符串解析为枚举以便调用ParseSTring("read") gives me Read`. 解决这个问题的最佳方法是什么?
根据@super的评论回答
var (
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
}
Run Code Online (Sandbox Code Playgroud)
这比最佳答案更好,因为如果您有大量枚举,则不必将列表写出两次(与最佳答案不同):
package usstates
type USState int
//go:generate stringer -type=USState
const (
Alabama USState = iota
Alaska
Arizona
Arkansas
California
Colorado
Connecticut
Delaware
Florida
Georgia
Hawaii
Idaho
Illinois
Indiana
Iowa
Kansas
Kentucky
Louisiana
Maine
Maryland
Massachusetts
Michigan
Minnesota
Mississippi
Missouri
Montana
Nebraska
Nevada
NewHampshire
NewJersey
NewMexico
NewYork
NorthCarolina
NorthDakota
Ohio
Oklahoma
Oregon
Pennsylvania
RhodeIsland
SouthCarolina
SouthDakota
Tennessee
Texas
Utah
Vermont
Virginia
Washington
WestVirginia
Wisconsin
Wyoming
)
var MapEnumStringToUSState = func() map[string]USState {
m := make(map[string]USState)
for i := Alabama; i <= Wyoming; i++ {
m[i.String()] = i
}
return m
}()
Run Code Online (Sandbox Code Playgroud)