История изменений
Исправление SuoiCat, (текущая версия) :
Sorry, писал на коленке, но суть должна быть ясна.
package main
import (
"encoding/json"
"fmt"
)
var msgTypes = map[string]func() interface{}{
"ChatMessage": func() interface{} {
return new(ChatMessage)
},
}
var testMsg = []byte(`{
"Type": "ChatMessage",
"Data": {
"Username": "usr",
"ConnectedTo": "nowhere",
"ChatId": 123
}
}`)
type JsonMessage struct {
Type string
Data json.RawMessage
}
type ChatMessage struct {
Username string `json:"Username"`
Message string `json:"ConnectedTo"`
ChatId int `json:"ChatId"`
}
func main() {
var msg JsonMessage
json.Unmarshal(testMsg, &msg)
fmt.Println(GetIncludedStruct(&msg))
}
func GetIncludedStruct(msg *JsonMessage) (interface{}, error) {
var result = msgTypes[msg.Type]()
err := json.Unmarshal(msg.Data, &result)
return result, err
}
Исправление SuoiCat, :
Исходная версия SuoiCat, :