我想用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/