尝试使用接口方法时golang编译器错误

golang compiler errors when trying to use interface method

我正在构建一个简单的可观察和处理程序包:

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)
}

我创建这个是为了使用包:

...
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)
    }
}
...

当我尝试使用 handler.Handle(event) 时,我得到了这个:handler.Handle undefined (type *Handler has no field or method Handle)

这对我来说没有意义。据我了解 golang 接口它应该工作,因为 Handler 接口的任何实现都会有 Handle(*Event).

问题是当 运行 go build.

时,Visual Code 实际上并没有给出与编译器相同的错误

真正的错误是:observe/observe_test.go:34:11: handler.Handle undefined (type *Handler is pointer to interface, not interface)

这可以通过取消引用处理程序轻松解决:(*handler).Handle(event)