为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
波斯汪 2022-06-13 10:50:07
这是代码:type OrderSide stringconst (    OrderSideSell OrderSide = "SELL"    OrderSideBuy  OrderSide = "BUY")type orderSides struct {    Sell OrderSide    Buy  OrderSide}var (    OrderSides orderSides = orderSides{        Sell: OrderSideSell,        Buy:  OrderSideBuy,    })现在,我希望能够在 astring和 OrderSide(或者更好的是,一个OrderSides字段)之间进行转换。换句话说,给定一个string包含"SELL"or "BUY",我如何返回相应的OrderSide常量(或OrderSides.<>字段)。需要明确的是,这里的目标是动态地执行此操作,这样我就不需要在添加额外 OrderSide 字段时添加案例的巨大开关。
查看完整描述

1 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

由于 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 的所有有效字符串值,值是空结构:


validOrderSides := make(map[string]struct{})


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

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

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


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


查看完整回答
反对 回复 2022-06-13
  • 1 回答
  • 0 关注
  • 148 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号