Unmarshal中的动态类型

问题描述 投票:0回答:1

我目前遇到以下问题:

我通过websocket得到一个[]字节/字符串,看起来像

eventname {"JSON": "data", "In": "different formats"}

我通过eventname和JSON数据之间的空格拆分字符串,并且根据事件名称,我想将JSON.Unmarshal()JSON数据转换为特定类型或特定类型的var,以确保其全部类型安全。

所以我可能有一个地图,其中包含所有可能的事件名称和JSON数据的相应类型,但我不知道如何保存类型,可能通过引用或字符串化名称?

type EventTypeList map[string]*interface{}

要么

type EventTypeList map[string]string

所以我可以查找事件是否在EventTypeList中,然后让Unmarshal func将数据解析为地图中的类型。

所以基本上不是特定类型“特定数据”:

type SpecificData struct {
    JSON string
    In   string
}

socketData := SpecificData{}
err := json.Unmarshal(jsonData, &socketData)

我想通过EventTypeList中的类型动态创建socketData var

socketData := [dynamically determine this Type from EventTypeList]{}

在将数据解析为该类型之后,我想调用该事件的所有侦听器并为它们提供具有正确类型的socketData,以便它们可以处理预期的数据。

但我真的不确定如何做到这一点,如果这是可能的,或者这是正确的方式......

谢谢你的帮助!

json go types
1个回答
0
投票

好的,经过研究,我认为我想要实现的是不可能的,因为在编译时需要知道类型,因为这里已经提到过:

Golang: cast an interface to a typed variable dynamically

但我想我可以将原始JSON字符串传递给侦听器回调并解组该函数中已知数据类型的数据。

感谢所有的贡献!

© www.soinside.com 2019 - 2024. All rights reserved.