处理此问题的一种方法是使用json.RawMessage字段为消息的固定部分定义结构,以捕获消息的变体部分。将json.RawMessage解码为特定于变体的类型:
type Message struct { Type string `json:type` Timestamp string `json:timestamp` Data json.RawMessage}type Event struct { Type string `json:type` Creator string `json:creator`}var m Messageif err := json.Unmarshal(data, &m); err != nil { log.Fatal(err)}switch m.Type {case "event": var e Event if err := json.Unmarshal([]byte(m.Data), &e); err != nil { log.Fatal(err) } fmt.Println(m.Type, e.Type, e.Creator)default: log.Fatal("bad message type")}游乐场的例子



