chen0520
V2EX  ›  Go 编程语言

golang 如何实现解压各种文件并附带 console 进度条

By chen0520 at 2025 年 8 月 26 日 · 2529 次点击

mholt/archiver 这个库好像并没有带进度的回调,gpt 搜了几个实现,感觉都不太行,有人做过类似的功能吗? 我看实际解压文件,这类进度基本都是带的啊,实现应该都不复杂啊

9 条回复    2025-09-14 12:33:43 +08:00
ysicing
   1
ysicing  
   2025 年 8 月 26 日
https://github.com/cheggaaa/pb 你说这个么,我用这个弄过文件操作的进度条。感觉好像没太大场景吧🤔
lqs
   2
lqs  
   2025 年 8 月 26 日
写文件的时候,自己累加 Write 的大小,或用 TeeReader 写到计数器
Sendya
   3
Sendya  
   2025 年 8 月 26 日   ❤️ 1
很多进度都是伪进度,通过 进度=current/total*100 。
但是我看了眼你描述的这个库,作者有提供一个思路是非常好的,通过读取与写出的 buf 大小累计,可以得出进度,因为原始压缩文件的大小是可以在 OpenFile 返回的 File.Stat() 取到,在计算百分比进度就可以了,这个准确度比通过 已经解压的文件数/总文件数*100 来的更准确些

https://github.com/mholt/archives/issues/16#issuecomment-2651918336
lolico
   4
lolico  
   2025 年 8 月 26 日 via iPhone
可以看下 progressbar
PungentSauce
   6
PungentSauce  
   2025 年 8 月 26 日
我也是用的楼上 github.com/schollz/progressbar 下载文件配合 progressbar 库实现的进度条
Mohanson
   7
Mohanson  
   2025 年 8 月 26 日
sthwrong
   8
sthwrong  
   2025 年 8 月 28 日
进度条库好找,不过 op 可能想要的是 3 楼的答案,也就是从哪里取得进度数据给进度条实现使用。
chen0520
   9
chen0520  
OP
   2025 年 9 月 14 日
@Sendya 按照你提供的 issue 实现了,不过这个包有个让我很困惑的点就是处理函数中获取解压文件的相对路径居然需要将已经抽象的压缩文件变量断言成原始的各个细分类型的压缩文件变量,不明白,这样的话抽象还有啥意义么。
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
© 2026 V2EX · 32ms · 3.9.8.5