go - 查找与字符串匹配的结构字段类型

标签 go

这是代码:

type OrderSide string

const (
    OrderSideSell OrderSide = "SELL"
    OrderSideBuy  OrderSide = "BUY"
)

type orderSides struct {
    Sell OrderSide
    Buy  OrderSide
}

var (
    OrderSides orderSides = orderSides{
        Sell: OrderSideSell,
        Buy:  OrderSideBuy,
    }
)

现在,我希望能够在string和OrderSide(或者更好的是OrderSides字段)之间进行转换。换句话说,给定一个包含string"SELL""BUY",我如何返回相应的OrderSide常量(或OrderSides.<>字段)。

明确地说,这里的目标是动态地执行此操作,因此我无需在添加其他OrderSide字段时在其中添加案例的大型开关。

最佳答案

由于OrderSide只是字符串的别名,因此从字符串转换为OrderSide的最简单方法是:anOrderSide = OrderSide(aString)

这是创建OrderSides或从字符串变量(Go Playground)获取它们的方法的更长示例:

type OrderSide string

func main() {
    var anOrderSide OrderSide
    anOrderSide = "def"

    fmt.Println(anOrderSide)
    fmt.Println(reflect.TypeOf(anOrderSide))

    var aString string
    var anotherOrderSide OrderSide

    aString = "abc"

    anotherOrderSide = OrderSide(aString)

    fmt.Println(aString)
    fmt.Println(reflect.TypeOf(aString))
    fmt.Println(anotherOrderSide)
    fmt.Println(reflect.TypeOf(anotherOrderSide))
}

根据您的“枚举”,这不会检查您的字符串是否为有效的OrderSide。您将需要验证字符串是否在其他位置的有效OrderSides列表中。一种简单的方法是创建一个映射,其中键是OrderSides的所有有效字符串值,并且值是空struct:
validOrderSides := make(map[string]struct{})

validOrderSides["BUY"] = struct{}{}
validOrderSides["SELL"] = struct{}{}

然后,您可以只检查计划转换的字符串是否在 map 中:_, ok := validOrderSides["BUY"]

或者,如果愿意,可以将其设置为map[string]OrderSide并从字符串转换为OrderSide并同时进行验证:orderSide, isValid := stringToOrderSide["BUY"]

关于go - 查找与字符串匹配的结构字段类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62420568/

相关文章:

Golang,添加项目并返回带有随机字符串的新结构

api - 如何使用相同的端口地址和不同的句柄模式来服务网页和 API 路由

sql - 如何在 gorm 中创建外键?

datetime - 如何在 Go 中获取序号指示符(第 1、第 2、第 3 等)

xml - 如何在go中将2个xml标记解析为1个结构?

go - 你什么时候在 Go 的结构中嵌入互斥量?

go - 当(HTTP)通过将 io.Reader 从 os.Open 传递到 http.Post 来发布本地文件时,Content-Length 为零

docker - 使用 gRPC Docker 容器构建 Go 时出错

go - 如何访问包外的模板?

go - 如何用Go boot编写内核?