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

这是代码:


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,

    }

)

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


需要明确的是,这里的目标是动态地执行此操作,这样我就不需要在添加额外 OrderSide 字段时添加案例的巨大开关。


波斯汪
浏览 149回答 1
1回答

一只甜甜圈

由于 OrderSide 只是字符串的别名,因此从字符串转换为 OrderSide 的最简单方法是:anOrderSide = OrderSide(aString).这是创建 OrderSides 或从字符串变量(Go Playground)获取它们的方法的更长示例:type OrderSide stringfunc main() {&nbsp; &nbsp; var anOrderSide OrderSide&nbsp; &nbsp; anOrderSide = "def"&nbsp; &nbsp; fmt.Println(anOrderSide)&nbsp; &nbsp; fmt.Println(reflect.TypeOf(anOrderSide))&nbsp; &nbsp; var aString string&nbsp; &nbsp; var anotherOrderSide OrderSide&nbsp; &nbsp; aString = "abc"&nbsp; &nbsp; anotherOrderSide = OrderSide(aString)&nbsp; &nbsp; fmt.Println(aString)&nbsp; &nbsp; fmt.Println(reflect.TypeOf(aString))&nbsp; &nbsp; fmt.Println(anotherOrderSide)&nbsp; &nbsp; 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"].
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go