您可以创建自己的程序
io.Reader来包装实际的阅读器,然后可以在每次
Read调用时输出进度。
类似于以下内容:
type ProgressReader struct { io.Reader Reporter func(r int64)}func (pr *ProgressReader) Read(p []byte) (n int, err error) { n, err = pr.Reader.Read(p) pr.Reporter(int64(n)) return}func main() { file, _ := os.Open("/tmp/blah.go") total := int64(0) pr := &ProgressReader{file, func(r int64) { total += r if r > 0 { fmt.Println("progress", r) } else { fmt.Println("done", r) } }} io.Copy(ioutil.Discard, pr)}


