Golang中的struct通用图

时间:2019-03-14 08:00:21

标签: go

基于无法更改的3rdparties代码,我有两种结构类型

type AddEvent struct {
}

type DeleteEvent struct {
}

我想创建一个字符串映射作为键,将对象映射为值 因此,每当我收到新事件时,我都会将其添加到地图中 地图应如下所示:

EventMap:
    event1,AddEvent{}
    event2,AddEvent{}
    event2,DeleteEvent{}

AddEvent和DeleteEvent没有定义为接口的问题。
我是否可以使用任何结构作为值在go中创建通用映射,如果是的话,我该如何读取它,我需要使用反射来检查类型

I.E
event:=EventMap[event1]
if reflect.TypeOf(event)==AddEvent{
}else if reflect.TypeOf(event)==DeleteEvent{
}

1 个答案:

答案 0 :(得分:3)

所显示的评论看起来不错,但缺少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
}