go - 纵梁工具是否有 "reverse"?

标签 go

在围棋中我可以使用 stringer将常量名称转换为字符串:

//go:generate stringer -type=M
type M int

const (
    _ M = iota
    Foo // "Foo"
    Bar // "Bar"
)

有什么可以让我转换 "foo"字符串转换为 M 类型的变量除了手写开关?

最佳答案

找到了一种方法,但它仍然是半手动的。通过使用stringer创建的mapping 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)
}

关于go - 纵梁工具是否有 "reverse"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61310161/

相关文章:

recursion - 递归 Goroutines,告诉 Go 停止从 channel 读取的最简洁方法是什么?

go - 在 Go 中读取 C 编写的二进制文件

go - 如何在 Golang 中声明一个常量映射?

go - 如何使用 gofmt 将单引号替换为双引号

Azure SDK for Go - 可以获取 KeyVault 但无法获取 KeyVault.Properties

html - Hugo 不显示子目录 [File.Dir] 中的页面

pointers - 复制原始对象后仍在修改

docker - 它说 “connection reset”不能使Docker容器在本地主机上运行?

go - Golang 从哪里获取根 CA?

Gob 解码给出 "DecodeValue of unassignable value"错误