I am building a simple observable and handler package:
package observe
type EventType string
type Event struct {
Type EventType
Data interface{}
}
type Observable interface {
Subscribe(EventType, *Handler)
Unsubscribe(EventType, *Handler)
Emit(EventType, interface{})
}
type Handler interface {
Handle(*Event)
}
I created this to use the package:
...
type ObservableMock struct {
subscribers map[EventType][]*Handler
}
func (om *ObservableMock) Emit(et EventType, data interface{}) {
event := &Event{
Type: et,
Data: data,
}
for _, handler := range om.subscribers[et] {
// ERROR HAPPENS HERE
handler.Handle(event)
}
}
...
When I try to use handler.Handle(event)
I get this: handler.Handle undefined (type *Handler has no field or method Handle)
It doesn't make sense to me. As far as I understand golang interfaces it should work, because any implementation of the Handler
interface is going to have Handle(*Event)
.