ランキングに戻る

A really basic thread-safe progress bar for Golang applications

progress-bargolangprogressbarlibrarycommand-linegoterminalhacktoberfest
スター成長
スター
4.7k
フォーク
254
週間成長
Issue
11
2k4k
2017年10月2020年9月2023年8月2026年7月
成果物Go Modulesgo get github.com/schollz/progressbar
README

progressbar

CI go report card coverage godocs

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:

Example of basic bar

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:

Example of download bar

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:

Example of download bar with unknown length

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:

Example of customized bar

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

関連リポジトリ
Textualize/rich

Rich is a Python library for rich text and beautiful formatting in the terminal.

PythonPyPIMIT Licensepythonpython3
rich.readthedocs.io/en/latest/
56.9k2.3k
tqdm/tqdm

:zap: A Fast, Extensible Progress Bar for Python and CLI

PythonPyPIOtherprogressbarprogressmeter
tqdm.github.io
31.2k1.5k
CodeByZach/pace

Automatically add a progress bar to your site.

CSSnpmMIT Licensepaceprogress-bar
codebyzach.github.io/pace/
15.6k1.8k
ybq/Android-SpinKit

Android loading animations

JavaMavenMIT Licenseloading-viewanimation
ybq.github.io/Android-SpinKit
8.6k1.3k
ng-bootstrap/ng-bootstrap

Angular powered Bootstrap

TypeScriptnpmMIT Licenseangularng-bootstrap
ng-bootstrap.github.io
8.2k1.6k
rsalmei/alive-progress

A new kind of Progress Bar, with real-time throughput, ETA, and very cool animations!

PythonPyPIMIT Licenseprogressbar
6.3k235
calimarkus/JDStatusBarNotification

Highly customizable & feature rich notifications. Interactive dismiss. Custom Views. SwiftUI. Tap-to-hold. Progress. Written in Swift, compatible for ObjC!

SwiftMIT Licensebannerios
calimarkus.github.io/JDStatusBarNotification/documentation/jdstatusbarnotification
4.3k564
cheggaaa/pb

Console progress bar for Golang

GoGo ModulesBSD 3-Clause "New" or "Revised" Licensegoprogress-bar
3.7k272
jedib0t/go-pretty

Table-writer and more in golang!

GoGo ModulesMIT Licensegolangtablewriter
3.5k135
p-ranav/indicators

Activity Indicators for Modern C++

C++MIT Licenseheader-onlymit-license
3.4k269
relatedcode/ProgressHUD

ProgressHUD is a lightweight and easy-to-use HUD for iOS. Over 5000+ animations.

SwiftMIT Licenseprogresshudprogressbar
relatedcode.com
3k507
HamzaGhazouani/HGCircularSlider

A custom reusable circular / progress slider control for iOS application.

SwiftMIT Licenseiosswift
2.6k277