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

2025 年 8 月 26 日
 chen0520

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

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

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

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.ih06.com/t/1155072

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX