LINUX.ORG.RU

История изменений

Исправление 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, :

Sorry, писал на коленке, но суть должна быть ясна.

Линк на плейграунд

Исходная версия SuoiCat, :

Sorry, писал на коленке, но суть должна быть ясна.

Линк на плейграунд