2 回答

TA貢獻1770條經(jīng)驗 獲得超3個贊
您應(yīng)該定義一個適配器結(jié)構(gòu),將io.Closer語義添加到您的基類型:
type WrappingRTPWriteCloser struct {
w RTPWriter
c io.Closer
}
然后,您應(yīng)該定義Close滿足接口的方法:
func (w *WrappingRTPWriteCloser) Close() error {
return w.c.Close()
}
然后,您應(yīng)該在創(chuàng)建實例時創(chuàng)建包裝結(jié)構(gòu)的新引用:
func NewRTPWriteCloser(wc io.WriteCloser) rtpio.RTPWriteCloser {
writeCloser := WrappingRTPWriteCloser{
w: rtpio.NewRTPWriter(wc),
c: wd,
}
return writeCloser
}
另一種解決方案是使用RTPPipe包開箱即用的函數(shù),它返回一個實例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條經(jīng)驗 獲得超4個贊
我相信您將需要按照建議創(chuàng)建一個新結(jié)構(gòu)來實現(xiàn)您的接口,讓我們調(diào)用它RawRTPWriterCloser并為Close().
但是,您可以將結(jié)構(gòu)嵌入到其他結(jié)構(gòu)中,因此該Close()方法是您需要額外定義的唯一函數(shù):
type RawRTPWriterCloser struct {
rtpio.RawRTPWriter
}
func (rw *RawRTPWriterCloser) Close() error {
panic("add implementation here")
}
- 2 回答
- 0 關(guān)注
- 110 瀏覽
添加回答
舉報