go语言实现进度条

Go 复制代码
package main

import (
	"fmt"
	"math/rand"
	"sync"
	"time"

	"github.com/vbauerster/mpb/v8"
	"github.com/vbauerster/mpb/v8/decor"
)

type File struct {
	Name string
	Size int
}

func main() {
	rand.Seed(time.Now().UnixNano())

	files := []File{
		{"file-A.txt", 100},
		{"file-B.txt", 80},
		{"file-C.txt", 120},
	}

	var wg sync.WaitGroup
	p := mpb.New(mpb.WithWaitGroup(&wg)) // 初始化进度管理器

	for _, file := range files {
		wg.Add(1)
		go simulateFileRead(p, file, &wg)
	}

	wg.Wait()
	// 给 mpb 终端输出留一帧渲染时间(重要!)
	time.Sleep(100 * time.Millisecond)
	fmt.Println("\n 所有文件读取完成!")
}

func simulateFileRead(p *mpb.Progress, file File, wg *sync.WaitGroup) {
	defer wg.Done()

	bar := p.New(
		int64(file.Size),
		mpb.BarStyle().Lbound("[").Filler("*").Tip(">").Padding(" ").Rbound("]"),
		mpb.PrependDecorators(
			decor.Name(file.Name, decor.WC{W: 12, C: decor.DSyncWidth}),
		),
		mpb.AppendDecorators(
			decor.Percentage(decor.WC{W: 6}),
		),
	)

	chunkSize := 5
	current := 0

	for current < file.Size {
		time.Sleep(time.Duration(rand.Intn(100)+100) * time.Millisecond)
		toAdd := chunkSize
		if current+chunkSize > file.Size {
			toAdd = file.Size - current
		}
		bar.IncrBy(toAdd)
		current += toAdd
	}
}
相关推荐
嗜好ya2 分钟前
JAVA集合篇--深入理解ConcurrentHashMap图解版
java·开发语言
小猫咪怎么会有坏心思呢27 分钟前
华为OD机考-生成哈夫曼树-二叉树(JAVA 2025B卷)
java·开发语言·华为od
卜及中31 分钟前
【Python】数据处理工具:Pandas详细指南
开发语言·python·学习·pandas
翱翔的小菜鸟1 小时前
Java Stream API中peek()方法使用不当引发的生产问题
java·开发语言
哪吒编程1 小时前
我的第一个AI编程助手,IDEA最新插件“飞算JavaAI”,太爽了
java·后端·ai编程
狐凄1 小时前
Python实例题:基于联邦学习的隐私保护 AI 系统(分布式学习、隐私计算)
开发语言·python
NLxxxxX2 小时前
爬虫获取数据:selenium的应用
开发语言·爬虫·python·selenium·测试工具·numpy·pandas
二闹2 小时前
我为什么躺平?因为代码自己会“飞”呀!
spring boot·后端·运营
mortimer2 小时前
一次MySQL大表索引删除之旅:从卡死到表损坏再到迁移
数据库·后端·mysql
想用offer打牌2 小时前
一站式了解责任链模式
java·后端·设计模式·责任链模式