登录
首页 >  Golang >  Go问答

在 Go 中能够绕过接口方法的实现吗?

来源:stackoverflow

时间:2024-03-09 12:42:25 400浏览 收藏

积累知识,胜过积蓄金银!毕竟在Golang开发的过程中,会遇到各种各样的问题,往往都是一些细节知识点还没有掌握好而导致的,因此基础知识点的积累是很重要的。下面本文《在 Go 中能够绕过接口方法的实现吗?》,就带大家讲解一下知识点,若是你对本文感兴趣,或者是想搞懂其中某个知识点,就请你继续往下看吧~

问题内容

我不确定“跳过”是否是描述我所看到的内容的正确方式:

type Container struct {
    clck         sync.Mutex
    closed       bool
    cli          *client.Client
    ID           string
    IO           io.ReadWriteCloser
    closetimeout time.Duration
}

func (c *Container) Write(dat []byte) (int, error) {
    return c.IO.Write(dat)
}

func (c *Container) Read(dat []byte) (int, error) {
    return c.IO.Read(dat)
}

在我看来,readwrite 方法没有实现。这在 golang 中叫什么?


解决方案


如果您谈论的是 container 类型,则 readwrite 方法实现已显示在您的代码中。您无法在不实现类型的情况下定义该方法。通过这些方法,container 现在实现 io.readerio.writerio.readwriter 接口。 containerreadwrite 方法简单地将操作委托给 readwritecloser 字段指向的 iocontainer 没有实现 clos​​e 方法,因此它不是 io.readwritecloser

如果您正在谈论 c.io.read,则这些方法是使用接口调用的。创建 container 实例时,必须将 c.io 设置为实现 io.readwritecloser 的结构体,并且当调用 c.io.read 时,将调用该结构体上的方法。例如,os.file 实现 io.readwritecloser,因此您可以:

file, err:=os.Open("filename")
ctr:=Container{IO:file}

此后,ctr.write 将写入该文件。

好了,本文到此结束,带大家了解了《在 Go 中能够绕过接口方法的实现吗?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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