在运行中,我可以使用stringer
将const名称转换为字符串:
//go:generate stringer -type=M
type M int
const (
_ M = iota
Foo // "Foo"
Bar // "Bar"
)
除了手写开关,是否有什么可以让我将
"foo"
字符串转换为M
类型的变量的? 最佳答案
找到了一种方法,但是仍然是半手工的。通过使用纵梁创建的映射 slice ,还可以搜索它来反转操作:
type Measurement int
const (
invalidMeasurement Measurement = iota
Meters
Liters
Pounds
)
// Works with golang.org/x/tools/cmd/stringer
// v0.0.0-20200925191224-5d1fdd8fa346
func UnString(s string) Measurement {
s = strings.ToLower(s)
l := strings.ToLower(_Measurement_name)
for i := 0; i < len(_Measurement_index)-1; i++ {
if s == l[_Measurement_index[i]:_Measurement_index[i+1]] {
return Measurement(i)
}
}
//
return Measurement(0)
}