cheggaaa/pb

GitHub: cheggaaa/pb

一个轻量级的 Go 终端进度条库,帮助开发者在命令行应用中直观展示任务执行进度。

Stars: 3723 | Forks: 272

# Go 的终端进度条 [![Coverage Status](https://coveralls.io/repos/github/cheggaaa/pb/badge.svg)](https://coveralls.io/github/cheggaaa/pb) ## 安装 ``` go get github.com/cheggaaa/pb/v3 ``` v1 版本进度条的文档可以在[这里](README_V1.md)查看。 ## 快速开始 ``` package main import ( "time" "github.com/cheggaaa/pb/v3" ) func main() { count := 100000 // create and start new bar bar := pb.StartNew(count) // start bar from 'default' template // bar := pb.Default.Start(count) // start bar from 'simple' template // bar := pb.Simple.Start(count) // start bar from 'full' template // bar := pb.Full.Start(count) for i := 0; i < count; i++ { bar.Increment() time.Sleep(time.Millisecond) } // finish bar bar.Finish() } ``` 结果如下: ``` > go run test.go 37158 / 100000 [---------------->_______________________________] 37.16% 916 p/s ``` ## 设置 ``` // create bar bar := pb.New(count) // refresh info every second (default 200ms) bar.SetRefreshRate(time.Second) // force set io.Writer, by default it's os.Stderr bar.SetWriter(os.Stdout) // bar will format numbers as bytes (B, KiB, MiB, etc) bar.Set(pb.Bytes, true) // bar use SI bytes prefix names (B, kB) instead of IEC (B, KiB) bar.Set(pb.SIBytesPrefix, true) // set custom bar template bar.SetTemplateString(myTemplate) // check for error after template set if err := bar.Err(); err != nil { return } // start bar bar.Start() ``` ## IO 操作的进度条 ``` package main import ( "crypto/rand" "io" "io/ioutil" "github.com/cheggaaa/pb/v3" ) func main() { var limit int64 = 1024 * 1024 * 500 // we will copy 500 MiB from /dev/rand to /dev/null reader := io.LimitReader(rand.Reader, limit) writer := ioutil.Discard // start new bar bar := pb.Full.Start64(limit) // create proxy reader barReader := bar.NewProxyReader(reader) // copy from proxy reader io.Copy(writer, barReader) // finish bar bar.Finish() } ``` ## 自定义进度条模板 渲染基于内置的 [text/template](https://pkg.go.dev/text/template) 包。你可以使用现有的 pb 元素,也可以创建自己的元素。 所有可用的元素都在 [element.go](v3/element.go) 文件中进行了说明。 #### 全部合一示例: ``` tmpl := `{{ red "With funcs:" }} {{ bar . "<" "-" (cycle . "↖" "↗" "↘" "↙" ) "." ">"}} {{speed . | rndcolor }} {{percent .}} {{string . "my_green_string" | green}} {{string . "my_blue_string" | blue}}` // start bar based on our template bar := pb.ProgressBarTemplate(tmpl).Start64(limit) // set values for string elements bar.Set("my_green_string", "green").Set("my_blue_string", "blue") ```
标签:EVTX分析, 日志审计