2 回答
TA贡献1777条经验 获得超10个赞
如果您在谈论Container类型,则ReadandWrite方法实现已经显示在您的代码中。你不能为一个类型定义一个方法而不实现它。使用这些方法,Container现在实现io.Reader、io.Writer和io.ReadWriter接口。简单的将操作委托给字段所指向的Read和Write方法。没有实现方法,所以它不是一个.ContainerReadWriteCloserIOContainerCloseio.ReadWriteCloser
如果您在谈论c.IO.Read,则使用接口调用这些方法。创建Container实例时,必须设置c.IO为实现的结构,io.ReadWriteCloser当c.IO.Read被调用时,将调用该结构上的方法。例如,一个os.Fileimplements io.ReadWriteCloser,所以你可以:
file, err:=os.Open("filename")
ctr:=Container{IO:file}
在此之后,ctr.Write将写入该文件。
TA贡献1828条经验 获得超3个赞
在这种情况下,两个方法都实现了,它们的实现调用了 IO 的方法。请注意,您可以根据需要更改实现,或在请求之前或之后添加行。
然而,有趣的是“跳过”可以通过匿名字段来实现。在这种情况下,如果您进行:
type Container struct {
io.ReadWriteCloser
clck sync.Mutex
closed bool
cli *client.Client
ID string
closetimeout time.Duration
}
io.ReadWriteCloser 的方法将执行到 Container 结构。
但是,如果您忘记将 ReadWriteCloser 放入结构中,它会出现恐慌,因此请尽量不要使用它,除非您知道自己在做什么。(例如: https: //play.golang.org/p/ak7qpaWSE8n)
- 2 回答
- 0 关注
- 122 浏览
添加回答
举报