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 關注
- 112 瀏覽
添加回答
舉報