1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 1884字,需瀏覽 4分鐘

         ·

        2021-11-13 18:13

        什么是 pb?


        pb是一個Go語言的終端進(jìn)度條庫。

        什么時候需要pb?

        終端顯示的工具進(jìn)行定時等待、IO傳輸?shù)炔僮鲿r,都可以用pb來顯示當(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è)置刷新速度(時間間隔)(默認(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è)置模板后檢查錯誤
        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 文件中描述了所有可用元素。

        我們可以將下面這個例子帶入到上面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ā)出更多實用且有趣的東西。

        參考鏈接

        https://github.com/cheggaaa/pb/


        《酷Go推薦》招募:


        各位Gopher同學(xué),最近我們社區(qū)打算推出一個類似GoCN每日新聞的新欄目《酷Go推薦》,主要是每周推薦一個庫或者好的項目,然后寫一點(diǎn)這個庫使用方法或者優(yōu)點(diǎn)之類的,這樣可以真正的幫助到大家能夠?qū)W習(xí)到

        新的庫,并且知道怎么用。


        大概規(guī)則和每日新聞類似,如果報名人多的話每個人一個月輪到一次,歡迎大家報名!戳「閱讀原文」,即可報名


        掃碼也可以加入 GoCN 的大家族喲~


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

        手機(jī)掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點(diǎn)贊
        評論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            无人乱码一区二区三区的观看模式 | 日韩欧美一| 一级性交网站 | 女人高潮69xxxx | 无套白嫩进入乌克兰美女 | 亚洲Av永久天堂影视浪潮av | 白丝久久| 人妖操逼 | 成人视频网站在线看 | 91精品国产乱码久久久久久久久 |