尝试使用接口方法时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)
。
我正在构建一个简单的可观察和处理程序包:
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
.
真正的错误是:observe/observe_test.go:34:11: handler.Handle undefined (type *Handler is pointer to interface, not interface)
这可以通过取消引用处理程序轻松解决:(*handler).Handle(event)
。