我正在尝试了解 Go 的接口(interface)和嵌入。
我在这里要做的是创建我自己的自定义 writer
和 reader
,其中每个实现 io.Writer
或 io.Reader
现在我想将这些实现基本接口(interface)的自定义结构嵌入到另一个实现Read/Write/Close
的自定义结构中。下面的代码是我目前所拥有的,但是当我运行它时出现以下错误
不能在 fmt.Fprintf 的参数中使用测试(类型 MyReadWriteCloser)作为类型 io.Writer:
MyReadWriteCloser 没有实现 io.Writer(缺少 Write 方法)
我想当你将一个结构嵌入另一个结构时,你也会得到嵌入结构的方法。有人可以告诉我我缺少什么吗?
package main
import (
"fmt"
"io"
)
type MyWriter struct {
w io.Writer
}
func (m MyWriter) Write(b []byte) (n int, err error) {
// encrypt b and write to underlying writer
m.w.Write(b)
return
}
type MyReader struct {
r io.Reader
}
func (m MyReader) Read(b []byte) (n int, err error) {
// decrypt b
m.r.Read(b)
return
}
type MyReadWriteCloser struct {
MyWriter
MyReader
}
func (m MyReadWriteCloser) Close() error {
return nil
}
func main() {
fmt.Println("main start")
r, w := io.Pipe()
test := MyReadWriteCloser{
MyWriter{w},
MyReader{r},
}
fmt.Fprintf(test, "hello world\n")
}
最佳答案
您不是在嵌入接口(interface),而是将它们作为结构中的字段。
嵌入看起来像:
type MyReader struct {
io.Reader
}
如果要手动委托(delegate)给接口(interface),需要使用相同的方法名
func (m MyReader) Read(b []byte) (n int, err error) {
return m.r.Read(b)
}
关于Go嵌入式自定义接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29439311/