gpt4 book ai didi

Go嵌入式自定义接口(interface)

转载 作者:数据小太阳 更新时间:2023-10-29 03:33:28 28 4
gpt4 key购买 nike

我正在尝试了解 Go 的接口(interface)和嵌入。

我在这里要做的是创建我自己的自定义 writerreader,其中每个实现 io.Writerio.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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com