<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          「GoCN酷Go推薦」終端進(jìn)度條-pb

          共 1884字,需瀏覽 4分鐘

           ·

          2021-11-13 18:13

          什么是 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 的大家族喲~


          瀏覽 53
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  91日韩欧美在线观看 | Aa黄片色黄 | 九色|PORNY|自拍视频 | 亚洲视频日韩精彩动漫一区二区 | 操久|