这是代码:
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/