2 回答
TA贡献1770条经验 获得超3个赞
您应该定义一个适配器结构,将io.Closer语义添加到您的基类型:
type WrappingRTPWriteCloser struct {
w RTPWriter
c io.Closer
}
然后,您应该定义Close满足接口的方法:
func (w *WrappingRTPWriteCloser) Close() error {
return w.c.Close()
}
然后,您应该在创建实例时创建包装结构的新引用:
func NewRTPWriteCloser(wc io.WriteCloser) rtpio.RTPWriteCloser {
writeCloser := WrappingRTPWriteCloser{
w: rtpio.NewRTPWriter(wc),
c: wd,
}
return writeCloser
}
另一种解决方案是使用RTPPipe包开箱即用的函数,它返回一个实例RTPReadCloser和一个RTPWriteCloser实例(将输入通过管道RTPReadCloser传递到RTPWriteCloser输出):
// RTPPipe creates a new RTPPipe and returns the reader and writer.
func RTPPipe() (RTPReadCloser, RTPWriteCloser) {
r, w := io.Pipe()
return &pipeRTPReader{closer: r, rtpReader: NewRTPReader(r, 1500)}, &pipeRTPWriter{closer: w, rtpWriter: NewRTPWriter(w)}
}
TA贡献1811条经验 获得超4个赞
我相信您将需要按照建议创建一个新结构来实现您的接口,让我们调用它RawRTPWriterCloser并为Close().
但是,您可以将结构嵌入到其他结构中,因此该Close()方法是您需要额外定义的唯一函数:
type RawRTPWriterCloser struct {
rtpio.RawRTPWriter
}
func (rw *RawRTPWriterCloser) Close() error {
panic("add implementation here")
}
- 2 回答
- 0 关注
- 86 浏览
添加回答
举报