情况
对于代码库,我使用pion/rtpio包.
我试图通过添加Close()
函数来扩展接口RTPwriter
.目标是生成一个NewRTPWritCloser()
函数,该函数返回具有组合函数的writeCloser.
从软件包中,我看到作者已经创建了界面RTPWriteCloser
type RTPWriteCloser interface {
RTPWriter
io.Closer
}
企图
我这样做是为了重用函数,这是错误的,但我还不知道替代方法:
func NewRTPWriteCloser(wc io.WriteCloser) rtpio.RTPWriteCloser {
writeCloser := rtpio.NewRTPWriter(wc)
return writeCloser
}
并期望wc
有自己的Close()
函数就绪,因此返回的writeCloser
将满足接口RTPWriteCloser
.然而,我得到了(missing method Close)
作为一个错误.
函数NewRTPWriter()
如下所示:
func NewRTPWriter(w io.Writer) RTPWriter {
return &RawRTPWriter{
dst: w,
}
}
问题
- 我们如何同时从多个嵌入接口创建一个包含所有所需函数的实例,以满足嵌入接口的要求?
- 在这个例子中,我们想为
RTPWriteCloser
接口创建NewRTPWriteCloser
个函数,但我们不能先创建一个writer,然后向其添加Close函数? - 我必须创建一个
RTPWriteCloser
的 struct 并重写所有需要的函数吗?(似乎效率低下)
已搜索
例如,我自己搜索了interfaces inside interface和combining or extending interfaces,但它们并没有让我最终理解我的问题.