Go插件每日推荐之 pb | Go 主题月结果将是这样的。 基于内置的文本/模板包进行渲染。你可以使用现有的 pb 的元
大家好,我是 @洛竹
本文首发于 洛竹的官方网站
本文同步于公众号『洛竹早茶馆』,转载请联系作者。
创作不易,养成习惯,素质三连!
Go 的终端进度条
安装
go get github.com/cheggaaa/pb/v3。
v1 的文档在 这里
快速启动
package main
import (
"time"
"github.com/cheggaaa/pb/v3"
)
func main() {
count := 100000
// 创建并开启一个新的进度条
bar := pb.StartNew(count)
// 基于Default模板开启一个进度条
// bar := pb.Default.Start(count)
// 基于 Simple 模板开启一个进度条
// bar := pb.Simple.Start(count)
// 基于 Full 模板开启一个进度条
// bar := pb.Full.Start(count)
for i := 0; i < count; i++ {
bar.Increment()
time.Sleep(time.Millisecond)
}
bar.Finish()
}
结果将是这样的。
> go run test.go
37158 / 100000 [================>_______________________________] 37.16% 1m11s
设置
// 创建进度条
bar := pb.New(count)
// 每秒刷新一次(默认 200ms)
bar.SetRefreshRate(time.Second)
// 强制设置 `io.Writer`,默认是 `os.Stderr`
bar.SetWriter(os.Stdout)
// bar will format numbers as bytes (B, KiB, MiB, etc)
// 进度条会在内部把数字转为字节(B, KiB, MiB 等)
bar.Set(pb.Bytes, true)
// bar use SI bytes prefix names (B, kB) instead of IEC (B, KiB)
// 进度条使用 SI 字节前缀(B,KB)代替 IEC(B,KiB)
bar.Set(pb.SIBytesPrefix, true)
// 设置自定义 进度条模板
bar.SetTemplateString(myTemplate)
// 检查设置的模板的正确性
if err = bar.Err(); err != nil {
return
}
// 开启一个进度条
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 200 Mb from /dev/rand to /dev/null
// 我们将从 `/dev/rand` 拷贝 200 Mb 文件到 `/dev/null/
reader := io.LimitReader(rand.Reader, limit)
writer := ioutil.Discard
// 开启一个新的进度条
bar := pb.Full.Start64(limit)
// 创建 proxy reader
barReader := bar.NewProxyReader(reader)
// 从 proxy reader 拷贝
io.Copy(writer, barReader)
// 完成进度条
bar.Finish()
}
自定义进度条模板
基于内置的文本/模板包进行渲染。你可以使用现有的 pb 的元素或创建你自己的元素。
所有可用的元素都在 element.go
文件中描述。
一个例子中的所有元素。
tmpl := `{{ red "With funcs:" }} {{ bar . "<" "-" (cycle . "↖" "↗" "↘" "↙" ) "." ">"}} {{speed . | rndcolor }} {{percent .}} {{string . "my_green_string" | green}} {{string . "my_blue_string" | blue}}`
// 基于 pb 的模板开启一个进度条
bar := pb.ProgressBarTemplate(tmpl).Start64(limit)
// 为 string 元素设置值
bar.Set("my_green_string", "green").
Set("my_blue_string", "blue")
转载自:https://juejin.cn/post/6947230860567379981