GitHub - schollz/progressbar: A really basic thread-safe progress bar for Golang applications (original) (raw)
progressbar
A very simple thread-safe progress bar which should work on every OS without problems. I needed a progressbar for croc and everything I tried had problems, so I made another one. In order to be OS agnostic I do not plan to support multi-line outputs.
Install
go get -u github.com/schollz/progressbar/v3
Usage
Basic usage
bar := progressbar.Default(100) for i := 0; i < 100; i++ { bar.Add(1) time.Sleep(40 * time.Millisecond) }
which looks like:
I/O operations
The progressbar implements an io.Writer so it can automatically detect the number of bytes written to a stream, so you can use it as a progressbar for an io.Reader.
req, _ := http.NewRequest("GET", "https://dl.google.com/go/go1.14.2.src.tar.gz", nil) resp, _ := http.DefaultClient.Do(req) defer resp.Body.Close()
f, _ := os.OpenFile("go1.14.2.src.tar.gz", os.O_CREATE|os.O_WRONLY, 0644) defer f.Close()
bar := progressbar.DefaultBytes( resp.ContentLength, "downloading", ) io.Copy(io.MultiWriter(f, bar), resp.Body)
which looks like:
Progress bar with unknown length
A progressbar with unknown length is a spinner. Any bar with -1 length will automatically convert it to a spinner with a customizable spinner type. For example, the above code can be run and set the resp.ContentLength to -1.
which looks like:
Customization
There is a lot of customization that you can do - change the writer, the color, the width, description, theme, etc. See all the options.
bar := progressbar.NewOptions(1000, progressbar.OptionSetWriter(ansi.NewAnsiStdout()), //you should install "github.com/k0kubun/go-ansi" progressbar.OptionEnableColorCodes(true), progressbar.OptionShowBytes(true), progressbar.OptionSetWidth(15), progressbar.OptionSetDescription("[cyan][1/3][reset] Writing moshable file..."), progressbar.OptionSetTheme(progressbar.Theme{ Saucer: "[green]=[reset]", SaucerHead: "[green]>[reset]", SaucerPadding: " ", BarStart: "[", BarEnd: "]", })) for i := 0; i < 1000; i++ { bar.Add(1) time.Sleep(5 * time.Millisecond) }
which looks like:
Contributing
Pull requests are welcome. Feel free to...
- Revise documentation
- Add new features
- Fix bugs
- Suggest improvements
Thanks
Thanks @Dynom for massive improvements in version 2.0!
Thanks @CrushedPixel for adding descriptions and color code support!
Thanks @MrMe42 for adding some minor features!
Thanks @tehstun for some great PRs!
Thanks @Benzammour and @haseth for helping create v3!
Thanks @briandowns for compiling the list of spinners.
License
MIT



