我想跟踪io.Pipe
的进度。我想出了以下结构ProgressPipeReader
,它包装io.PipeReader
,以ProgressPipeReader.progress
内的字节存储进度:
type ProgressPipeReader struct {
io.PipeReader
progress int64
}
func (pr *ProgressPipeReader) Read(data []byte) (int, error) {
n, err := pr.PipeReader.Read(data)
if err == nil {
pr.progress += int64(n)
}
return n, err
}
不幸的是,我似乎无法使用它来包装io.PipeReader
。以下代码段
pr, pw := io.Pipe()
pr = &ProgressPipeReader{PipeReader: pr}
产生错误
cannot use pr (type *io.PipeReader) as type io.PipeReader in field value
任何提示?
答案 0 :(得分:2)
如错误所述,您尝试在*io.PipeReader
字段中存储io.PipeReader
值。您可以通过将结构定义更新为正确的类型来解决此问题:
type ProgressPipeReader struct {
*io.PipeReader
progress int64
}