• Stars
    star
    409
  • Rank 105,709 (Top 3 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created almost 7 years ago
  • Updated about 4 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

io.Reader and io.Writer with progress and remaining time estimation

progress GoDoc Build Status Go Report Card

io.Reader and io.Writer with progress and remaining time estimation.

Usage

ctx := context.Background()

// get a reader and the total expected number of bytes
s := `Now that's what I call progress`
size := len(s)
r := progress.NewReader(strings.NewReader(s))

// Start a goroutine printing progress
go func() {
	ctx := context.Background()
	progressChan := progress.NewTicker(ctx, r, size, 1*time.Second)
	for p := range progressChan {
		fmt.Printf("\r%v remaining...", p.Remaining().Round(time.Second))
	}
	fmt.Println("\rdownload is completed")
}()

// use the Reader as normal
if _, err := io.Copy(dest, r); err != nil {
	log.Fatalln(err)
}
  1. Wrap an io.Reader or io.Writer with NewReader and NewWriter respectively
  2. Capture the total number of expected bytes
  3. Use progress.NewTicker to get a channel on which progress updates will be sent
  4. Start a Goroutine to periodically check the progress, and do something with it - like log it
  5. Use the readers and writers as normal

More Repositories