cheggaaa/pb
GitHub: cheggaaa/pb
一个轻量级的 Go 终端进度条库,帮助开发者在命令行应用中直观展示任务执行进度。
Stars: 3723 | Forks: 272
# Go 的终端进度条
[](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分析, 日志审计