我想跟踪 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
有什么提示吗?
最佳答案
正如错误所述,您尝试在 io.PipeReader
字段中存储 *io.PipeReader
值。您可以通过将结构定义更新为正确的类型来解决此问题:
type ProgressPipeReader struct {
*io.PipeReader
progress int64
}
关于go - 包装 io.PipeReader 来存储进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44759185/