我有两种无法更改的基于3rdparties代码的结构类型
1 2 3 4 5 | type AddEvent struct { } type DeleteEvent struct { } |
我想创建一个字符串映射作为键和对象作为值
因此,每当我收到新事件时,我都会将其添加到地图中
地图应如下所示:
1 2 3 4 | EventMap: event1,AddEvent{} event2,AddEvent{} event2,DeleteEvent{} |
AddEvent和DeleteEvent未定义为接口的问题。
我是否可以使用任何结构作为值在go中创建通用映射,如果是的话,我该如何读取它,我需要使用reflect检查类型
1 2 3 4 5 | I.E event:=EventMap[event1] if reflect.TypeOf(event)==AddEvent{ }else if reflect.TypeOf(event)==DeleteEvent{ } |
-
您可以使用
map[string]interface{} ,即空接口的映射,并且可以使用类型断言来读取它。 例如。ae, ok := m["add_event"].(AddEvent) 。
评论说的内容看起来不错,但缺少
1 2 3 4 5 6 7 8 9 | m := make(map[string]interface{}) addEvent := new(AddEvent) m["event1"] = addEvent switch m["event1"].(type) { case *AddEvent: // do something case *DeleteEvent: // do other things } |
- 感谢工作:),但不应使用指针大小写* AddEvent:由大小写AddEvent代替:
- 最好使用指针引用,除非需要获取struct的副本。
- 同意,因为我也可以更改结构