2 回答

TA貢獻1799條經驗 獲得超9個贊
最后我采用了這種方法:
config := &mapstructure.DecoderConfig{
DecodeHook: func(sourceType, destType reflect.Type, raw interface{}) (interface{}, error) {
var result Action
if fmt.Sprintf("%s", destType) == "Action" {
rawMap := raw.(map[interface{}]interface{})
switch rawMap["type"] {
case "one":
result = One{}
case "two":
result = Two{}
}
mapstructure.Decode(raw, &result)
return result, nil
}
return raw, nil
},
Result: &actions,
}
我只是從 Go 開始,所以可能有更好的方法,但這有點解決了我遇到的兩個問題。
更正:我不得不恢復if fmt.Sprintf("%s", destType) == "Action"到reflect.TypeOf(result) == nil
- 2 回答
- 0 關注
- 124 瀏覽
添加回答
舉報