pb.v1: gopkg.in/cheggaaa/pb.v1 Index | Examples | Files | Directories

package pb

import "gopkg.in/cheggaaa/pb.v1"

Simple console progress bars


count := 5000
bar := pb.New(count)

// show percents (by default already true)
bar.ShowPercent = true

// show bar (by default already true)
bar.ShowBar = true

bar.ShowCounters = true

bar.ShowTimeLeft = true

// and start
for i := 0; i < count; i++ {
bar.FinishPrint("The End!")


package main

import (


func main() {
    // check args
    if len(os.Args) < 3 {
    sourceName, destName := os.Args[1], os.Args[2]

    // check source
    var source io.Reader
    var sourceSize int64
    if strings.HasPrefix(sourceName, "http://") {
        // open as url
        resp, err := http.Get(sourceName)
        if err != nil {
            fmt.Printf("Can't get %s: %v\n", sourceName, err)
        defer resp.Body.Close()
        if resp.StatusCode != http.StatusOK {
            fmt.Printf("Server return non-200 status: %v\n", resp.Status)
        i, _ := strconv.Atoi(resp.Header.Get("Content-Length"))
        sourceSize = int64(i)
        source = resp.Body
    } else {
        // open as file
        s, err := os.Open(sourceName)
        if err != nil {
            fmt.Printf("Can't open %s: %v\n", sourceName, err)
        defer s.Close()
        // get source size
        sourceStat, err := s.Stat()
        if err != nil {
            fmt.Printf("Can't stat %s: %v\n", sourceName, err)
        sourceSize = sourceStat.Size()
        source = s

    // create dest
    dest, err := os.Create(destName)
    if err != nil {
        fmt.Printf("Can't create %s: %v\n", destName, err)
    defer dest.Close()

    // create bar
    bar := pb.New(int(sourceSize)).SetUnits(pb.U_BYTES).SetRefreshRate(time.Millisecond * 10)
    bar.ShowSpeed = true

    // create proxy reader
    reader := bar.NewProxyReader(source)

    // and copy from reader
    io.Copy(dest, reader)

func printUsage() {
    fmt.Println("copy [source file or url] [dest file]")


// create bars
first := pb.New(200).Prefix("First ")
second := pb.New(200).Prefix("Second ")
third := pb.New(200).Prefix("Third ")
// start pool
pool, err := pb.StartPool(first, second, third)
if err != nil {
// update bars
wg := new(sync.WaitGroup)
for _, bar := range []*pb.ProgressBar{first, second, third} {
    go func(cb *pb.ProgressBar) {
        for n := 0; n < 200; n++ {
            time.Sleep(time.Millisecond * time.Duration(rand.Intn(100)))
// close pool



Package Files

format.go pb.go pb_x.go pool.go pool_x.go reader.go runecount.go termios_sysv.go writer.go


const (
    KiB = 1024
    MiB = 1048576
    GiB = 1073741824
    TiB = 1099511627776

    KB  = 1e3
    MB  = 1e6
    GB  = 1e9
    TB  = 1e12
const (
    // Default refresh rate - 200ms
    DEFAULT_REFRESH_RATE = time.Millisecond * 200
    FORMAT               = "[=>-]"
const Version = "1.0.29"

Current version


var (
    DefaultRefreshRate                         = DEFAULT_REFRESH_RATE
    BarStart, BarEnd, Empty, Current, CurrentN string

DEPRECATED variables for backward compatibility, from now do not work use pb.Format and pb.SetRefreshRate

var ErrPoolWasStarted = errors.New("Bar pool was started")

func Format Uses

func Format(i int64) *formatter

func GetTerminalWidth Uses

func GetTerminalWidth() (int, error)

GetTerminalWidth - returns terminal width for all platforms.

type Callback Uses

type Callback func(out string)

Callback for custom output For example: bar.Callback = func(s string) {



type Pool Uses

type Pool struct {
    Output      io.Writer
    RefreshRate time.Duration
    // contains filtered or unexported fields

func NewPool Uses

func NewPool(pbs ...*ProgressBar) (pool *Pool)

NewPool initialises a pool with progress bars, but doesn't start it. You need to call Start manually

func StartPool Uses

func StartPool(pbs ...*ProgressBar) (pool *Pool, err error)

Create and start new pool with given bars You need call pool.Stop() after work

func (*Pool) Add Uses

func (p *Pool) Add(pbs ...*ProgressBar)

Add progress bars.

func (*Pool) Start Uses

func (p *Pool) Start() (err error)

func (*Pool) Stop Uses

func (p *Pool) Stop() error

Restore terminal state and close pool

type ProgressBar Uses

type ProgressBar struct {
    Total                            int64
    RefreshRate                      time.Duration
    ShowPercent, ShowCounters        bool
    ShowSpeed, ShowTimeLeft, ShowBar bool
    ShowFinalTime, ShowElapsedTime   bool
    Output                           io.Writer
    Callback                         Callback
    NotPrint                         bool
    Units                            Units
    Width                            int
    ForceWidth                       bool
    ManualUpdate                     bool
    AutoStat                         bool

    // Default width for the time box.
    UnitsWidth   int
    TimeBoxWidth int

    BarStart string
    BarEnd   string
    Empty    string
    Current  string
    CurrentN string

    AlwaysUpdate bool
    // contains filtered or unexported fields

func New Uses

func New(total int) *ProgressBar

Create new progress bar object

func New64 Uses

func New64(total int64) *ProgressBar

Create new progress bar object using int64 as total

func StartNew Uses

func StartNew(total int) *ProgressBar

Create new object and start

func (*ProgressBar) Add Uses

func (pb *ProgressBar) Add(add int) int

Add to current value

func (*ProgressBar) Add64 Uses

func (pb *ProgressBar) Add64(add int64) int64

func (*ProgressBar) Finish Uses

func (pb *ProgressBar) Finish()

End print

func (*ProgressBar) FinishPrint Uses

func (pb *ProgressBar) FinishPrint(str string)

End print and write string 'str'

func (*ProgressBar) Format Uses

func (pb *ProgressBar) Format(format string) *ProgressBar

Set custom format for bar Example: bar.Format("[=>_]") Example: bar.Format("[\x00=\x00>\x00-\x00]") // \x00 is the delimiter

func (*ProgressBar) Get Uses

func (pb *ProgressBar) Get() int64

Get current value

func (*ProgressBar) GetWidth Uses

func (pb *ProgressBar) GetWidth() int

func (*ProgressBar) Increment Uses

func (pb *ProgressBar) Increment() int

Increment current value

func (*ProgressBar) IsFinished Uses

func (pb *ProgressBar) IsFinished() bool

IsFinished return boolean

func (*ProgressBar) NewProxyReader Uses

func (pb *ProgressBar) NewProxyReader(r io.Reader) *Reader

Create new proxy reader over bar Takes io.Reader or io.ReadCloser

func (*ProgressBar) NewProxyWriter Uses

func (pb *ProgressBar) NewProxyWriter(r io.Writer) *Writer

Create new proxy writer over bar Takes io.Writer or io.WriteCloser

func (*ProgressBar) Postfix Uses

func (pb *ProgressBar) Postfix(postfix string) *ProgressBar

Set postfix string

func (*ProgressBar) Prefix Uses

func (pb *ProgressBar) Prefix(prefix string) *ProgressBar

Set prefix string

func (*ProgressBar) Read Uses

func (pb *ProgressBar) Read(p []byte) (n int, err error)

implement io.Reader

func (*ProgressBar) Reset Uses

func (pb *ProgressBar) Reset(total int) *ProgressBar

Reset bar and set new total count Does effect only on finished bar

func (*ProgressBar) Set Uses

func (pb *ProgressBar) Set(current int) *ProgressBar

Set current value

func (*ProgressBar) Set64 Uses

func (pb *ProgressBar) Set64(current int64) *ProgressBar

Set64 sets the current value as int64

func (*ProgressBar) SetMaxWidth Uses

func (pb *ProgressBar) SetMaxWidth(width int) *ProgressBar

Set max width, if width is bigger than terminal width, will be ignored

func (*ProgressBar) SetRefreshRate Uses

func (pb *ProgressBar) SetRefreshRate(rate time.Duration) *ProgressBar

Set bar refresh rate

func (*ProgressBar) SetTotal Uses

func (pb *ProgressBar) SetTotal(total int) *ProgressBar

SetTotal atomically sets new total count

func (*ProgressBar) SetTotal64 Uses

func (pb *ProgressBar) SetTotal64(total int64) *ProgressBar

SetTotal64 atomically sets new total count

func (*ProgressBar) SetUnits Uses

func (pb *ProgressBar) SetUnits(units Units) *ProgressBar

Set units bar.SetUnits(U_NO) - by default bar.SetUnits(U_BYTES) - for Mb, Kb, etc

func (*ProgressBar) SetWidth Uses

func (pb *ProgressBar) SetWidth(width int) *ProgressBar

Set bar width

func (*ProgressBar) Start Uses

func (pb *ProgressBar) Start() *ProgressBar

Start print

func (*ProgressBar) String Uses

func (pb *ProgressBar) String() string

String return the last bar print

func (*ProgressBar) Update Uses

func (pb *ProgressBar) Update()

Write the current state of the progressbar

func (*ProgressBar) Write Uses

func (pb *ProgressBar) Write(p []byte) (n int, err error)

implement io.Writer

type Reader Uses

type Reader struct {
    // contains filtered or unexported fields

It's proxy reader, implement io.Reader

func (*Reader) Close Uses

func (r *Reader) Close() (err error)

Close the reader when it implements io.Closer

func (*Reader) Read Uses

func (r *Reader) Read(p []byte) (n int, err error)

type Units Uses

type Units int
const (
    // U_NO are default units, they represent a simple value and are not formatted at all.
    U_NO Units = iota
    // U_BYTES units are formatted in a human readable way (B, KiB, MiB, ...)
    // U_BYTES_DEC units are like U_BYTES, but base 10 (B, KB, MB, ...)
    // U_DURATION units are formatted in a human readable way (3h14m15s)

type Writer Uses

type Writer struct {
    // contains filtered or unexported fields

It's proxy Writer, implement io.Writer

func (*Writer) Close Uses

func (r *Writer) Close() (err error)

Close the reader when it implements io.Closer

func (*Writer) Write Uses

func (r *Writer) Write(p []byte) (n int, err error)



Package pb imports 15 packages (graph) and is imported by 528 packages. Updated 2020-08-07. Refresh now. Tools for package owners.