我目前遇到以下问题:
我通过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将数据解析为地图中的类型。
基本上不是特定类型“SpecificData”:
type SpecificData struct {
JSON string
In string
}
socketData := SpecificData{}
err := json.Unmarshal(jsonData, &socketData)
我想通过EventTypeList
中的类型动态创建socketData varsocketData := [dynamically determine this Type from EventTypeList]{}
在将数据解析为该类型后,我想调用该事件的所有侦听器并为它们提供正确类型的socketData,以便它们可以处理预期的数据。
但我真的不确定如何做到这一点,如果这是可能的,或者这是正确的方式......
感谢您的帮助!
答案 0 :(得分:0)
好的,在重新研究之后,我认为我想要实现的目标是不可能的,因为类型需要在编译时知道,如下所述:
Golang: cast an interface to a typed variable dynamically
但我认为我可以将原始JSON字符串传递给侦听器回调并解组该函数中已知数据类型的数据。
感谢您的所有贡献!