1 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超5個贊
問題中的方法不起作用,因?yàn)榍度胧浇Y(jié)構(gòu)共享字段名稱。試試這個方法。
聲明一個將游戲類型標(biāo)識符與相關(guān)圍棋類型相關(guān)聯(lián)的地圖。這只是與解碼相關(guān)的代碼,它知道數(shù)百種游戲類型。
var gameTypes = map[int]reflect.Type{
1: reflect.TypeOf(&MatchGame1{}),
2: reflect.TypeOf(&MatchGame2{}),
}
將匹配數(shù)據(jù)解碼為原始消息。使用游戲類型創(chuàng)建匹配數(shù)據(jù)值并解碼為該值。
func decodeMatch(r io.Reader) (*Match, error) {
// Start with match data set to a raw messae.
var raw json.RawMessage
m := &Match{MatchData: &raw}
err := json.NewDecoder(r).Decode(m)
if err != nil {
return nil, err
}
m.MatchData = nil
// We are done if there's no raw message.
if len(raw) == 0 {
return m, nil
}
// Create the required match data value.
t := gameTypes[m.GameType]
if t == nil {
return nil, errors.New("unknown game type")
}
m.MatchData = reflect.New(t.Elem()).Interface()
// Decode the raw message to the match data.
return m, json.Unmarshal(raw, m.MatchData)
}
- 1 回答
- 0 關(guān)注
- 105 瀏覽
添加回答
舉報