登录
首页 >  Golang >  Go问答

在使用接口方法时,遇到了 golang 编译器的错误

来源:stackoverflow

时间:2024-02-20 16:57:24 400浏览 收藏

IT行业相对于一般传统行业,发展更新速度更快,一旦停止了学习,很快就会被行业所淘汰。所以我们需要踏踏实实的不断学习,精进自己的技术,尤其是初学者。今天golang学习网给大家整理了《在使用接口方法时,遇到了 golang 编译器的错误》,聊聊,我们一起来看看吧!

问题内容

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

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(类型*Handler是指向接口的指针,而不是接口)

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

本篇关于《在使用接口方法时,遇到了 golang 编译器的错误》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>