Go:进度条工具库 vbauerster/mpb 简介
创始人
2024-02-08 14:23:10

文章目录

    • 简介
    • 核心能力
    • 示例
      • 单进度条渲染
      • 多进度条渲染
    • 小结


简介

mpb是一个在终端进行进度条渲染的工具库

核心能力

  • 支持多进度条
    Multiple Bars: Multiple progress bars are supported
  • 支持动态设置进度条总值
    Dynamic Total: Set total while bar is running
  • 支持动态增加 / 删除进度条
    Dynamic Add/Remove: Dynamically add or remove bars
  • 支持在渲染过程中取消进度条渲染
    Cancellation: Cancel whole rendering process
  • 支持预定义修饰符,包括运行时间,百分比,计数器等
    Predefined Decorators: Elapsed time, ewma based ETA, Percentage, Bytes counter
  • 支持异步调整多进度条的长度
    Decorator’s width sync: Synchronized decorator’s width among multiple bars

示例

单进度条渲染

package mainimport ("math/rand""time""github.com/vbauerster/mpb/v8""github.com/vbauerster/mpb/v8/decor"
)func main() {// initialize progress container, with custom widthp := mpb.New(mpb.WithWidth(64))total := 100name := "Single Bar:"// create a single bar, which will inherit container's widthbar := p.New(int64(total),// BarFillerBuilder with custom stylempb.BarStyle().Lbound("╢").Filler("▌").Tip("▌").Padding("░").Rbound("╟"),mpb.PrependDecorators(// display our name with one space on the rightdecor.Name(name, decor.WC{W: len(name) + 1, C: decor.DidentRight}),// replace ETA decorator with "done" message, OnComplete eventdecor.OnComplete(decor.AverageETA(decor.ET_STYLE_GO, decor.WC{W: 4}), "done",),),mpb.AppendDecorators(decor.Percentage()),)// simulating some workmax := 100 * time.Millisecondfor i := 0; i < total; i++ {time.Sleep(time.Duration(rand.Intn(10)+1) * max / 10)bar.Increment()}// wait for our bar to complete and flushp.Wait()
}

执行结果:
在这里插入图片描述

多进度条渲染

    var wg sync.WaitGroup// passed wg will be accounted at p.Wait() callp := mpb.New(mpb.WithWaitGroup(&wg))total, numBars := 100, 3wg.Add(numBars)for i := 0; i < numBars; i++ {name := fmt.Sprintf("Bar#%d:", i)bar := p.AddBar(int64(total),mpb.PrependDecorators(// simple name decoratordecor.Name(name),// decor.DSyncWidth bit enables column width synchronizationdecor.Percentage(decor.WCSyncSpace),),mpb.AppendDecorators(// replace ETA decorator with "done" message, OnComplete eventdecor.OnComplete(// ETA decorator with ewma age of 60decor.EwmaETA(decor.ET_STYLE_GO, 60, decor.WCSyncWidth), "done",),),)// simulating some workgo func() {defer wg.Done()rng := rand.New(rand.NewSource(time.Now().UnixNano()))max := 100 * time.Millisecondfor i := 0; i < total; i++ {// start variable is solely for EWMA calculation// EWMA's unit of measure is an iteration's durationstart := time.Now()time.Sleep(time.Duration(rng.Intn(10)+1) * max / 10)// we need to call EwmaIncrement to fulfill ewma decorator's contractbar.EwmaIncrement(time.Since(start))}}()}// wait for passed wg and for all bars to complete and flushp.Wait()

运行结果:
在这里插入图片描述

小结

参考地址: https://github.com/vbauerster/mpb

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...