「GoCN酷Go推薦」終端進(jìn)度條-pb
什么是 pb?
pb是一個(gè)Go語(yǔ)言的終端進(jìn)度條庫(kù)。
什么時(shí)候需要pb?
終端顯示的工具進(jìn)行定時(shí)等待、IO傳輸?shù)炔僮鲿r(shí),都可以用pb來(lái)顯示當(dāng)前進(jìn)度。
pb入門
安裝pb
go?get?github.com/cheggaaa/pb/v3
快速上手
package?main
import?(
?"time"
?"github.com/cheggaaa/pb/v3"
)
func?main()?{
?count?:=?100000
?//?創(chuàng)建進(jìn)度條并開始
?bar?:=?pb.StartNew(count)
?for?i?:=?0;?i???bar.Increment()
??time.Sleep(50?*?time.Microsecond)
?}
?//?結(jié)束進(jìn)度條
?bar.Finish()
}
我們可以看到如下的效果
47921?/?100000?[--------------------->______________________]?47.92%?13945?p/s
自定義進(jìn)度條的方法
//?創(chuàng)建進(jìn)度條
bar?:=?pb.New(count)
//?設(shè)置刷新速度(時(shí)間間隔)(默認(rèn)為200毫秒)
bar.SetRefreshRate(time.Second)
//?強(qiáng)制設(shè)置io.Writer,默認(rèn)為os.Stderr
bar.SetWriter(os.Stdout)
//?進(jìn)度條將數(shù)字格式化為字節(jié)(B、KiB、MiB等)
bar.Set(pb.Bytes,?true)
//?進(jìn)度條使用SI字節(jié)前綴名稱(B,kB)代替IEC(B,KiB)
bar.Set(pb.SIBytesPrefix,?true)
//?設(shè)置自定義的進(jìn)度條模板
bar.SetTemplateString(myTemplate)
//?設(shè)置模板后檢查錯(cuò)誤
if?err?:=?bar.Err();?err?!=?nil?{
return
}
//?進(jìn)度條開始
bar.Start()
IO操作的進(jìn)度條
package?main
import?(
?"crypto/rand"
?"io"
?"io/ioutil"
?"github.com/cheggaaa/pb/v3"
)
func?main()?{
?var?limit?int64?=?1024?*?1024?*?500
?//?我們將把500MiB從/dev/rand復(fù)制到/dev/null
?reader?:=?io.LimitReader(rand.Reader,?limit)
?writer?:=?ioutil.Discard
?//?開始進(jìn)度條
?bar?:=?pb.Full.Start64(limit)
?//?創(chuàng)建代理讀取器
?barReader?:=?bar.NewProxyReader(reader)
?//?從代理讀取器復(fù)制
?io.Copy(writer,?barReader)
?//?結(jié)束進(jìn)度條
?bar.Finish()
}
運(yùn)行效果
258.07?MiB?/?500.00?MiB?[---------------->_______________]?51.61%?180.84?MiB?p/s?ETA?1s
自定義進(jìn)度條模板
基于內(nèi)置文本/模板包的渲染。您可以使用現(xiàn)有pb的元素,也可以創(chuàng)建自己的元素。
element.go 文件中描述了所有可用元素。
我們可以將下面這個(gè)例子帶入到上面IO操作的進(jìn)度條的DEMO中,這里就不展示效果了。
tmpl?:=?`{{?red?"With?funcs:"?}}?{{?bar?.?"<"?"-"?(cycle?.?"↖"?"↗"?"↘"?"↙"?)?"."?">"}}?{{speed?.?|?rndcolor?}}?{{percent?.}}?{{string?.?"my_green_string"?|?green}}?{{string?.?"my_blue_string"?|?blue}}`
//?開始基于我們的模板的進(jìn)度條
bar?:=?pb.ProgressBarTemplate(tmpl).Start64(limit)
//?設(shè)置字符串元素的值
bar.Set("my_green_string",?"green").Set("my_blue_string",?"blue")
總結(jié)
pb可以幫助我們豐富Golang編寫的終端工具,希望大家可以借此開發(fā)出更多實(shí)用且有趣的東西。
參考鏈接
https://github.com/cheggaaa/pb/
《酷Go推薦》招募:
各位Gopher同學(xué),最近我們社區(qū)打算推出一個(gè)類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個(gè)庫(kù)或者好的項(xiàng)目,然后寫一點(diǎn)這個(gè)庫(kù)使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到
新的庫(kù),并且知道怎么用。
大概規(guī)則和每日新聞?lì)愃疲绻麍?bào)名人多的話每個(gè)人一個(gè)月輪到一次,歡迎大家報(bào)名!戳「閱讀原文」,即可報(bào)名
掃碼也可以加入 GoCN 的大家族喲~
評(píng)論
圖片
表情
