我有两种基于第三方代码的结构类型,我无法更改
type AddEvent struct {
}
type DeleteEvent struct {
}
Run Code Online (Sandbox Code Playgroud)
我想创建一个以字符串为键、以对象为值的映射,因此每次收到新事件时,我都会将其添加到映射中,IE 映射应如下所示:
EventMap:
event1,AddEvent{}
event2,AddEvent{}
event2,DeleteEvent{}
Run Code Online (Sandbox Code Playgroud)
AddEvent 和DeleteEvent 未定义为接口的问题。
有没有办法使用任何结构作为值在 go 中创建通用映射,如果是的话,我如何读取它,我是否需要使用反射检查类型
I.E
event:=EventMap[event1]
if reflect.TypeOf(event)==AddEvent{
}else if reflect.TypeOf(event)==DeleteEvent{
}
Run Code Online (Sandbox Code Playgroud)
评论说看起来不错,但缺少type switch。也许您需要的完整版本是:
m := make(map[string]interface{})
addEvent := new(AddEvent)
m["event1"] = addEvent
switch m["event1"].(type) {
case *AddEvent:
// do something
case *DeleteEvent:
// do other things
}
Run Code Online (Sandbox Code Playgroud)