go语言怎么实时显示下载进度
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,这篇文章主要讲解了"go语言怎么实时显示下载进度",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"go语言怎么实时显示下载进度"吧!本示例说明如何从网上将
千家信息网最后更新 2025年01月20日go语言怎么实时显示下载进度
这篇文章主要讲解了"go语言怎么实时显示下载进度",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"go语言怎么实时显示下载进度"吧!
本示例说明如何从网上将文件下载到本地计算机。通过io.Copy()直接使用并传递响应主体,我们将数据流式传输到文件中,而不必将其全部加载到内存中-小文件不是问题,但下载大文件时会有所不同。
package mainimport ( "io" "net/http" "os")func main() { fileUrl := "http://topgoer.com/static/2/9.png" if err := DownloadFile("9.png", fileUrl); err != nil { panic(err) }}// download file会将url下载到本地文件,它会在下载时写入,而不是将整个文件加载到内存中。func DownloadFile(filepath string, url string) error { // Get the data resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() // Create the file out, err := os.Create(filepath) if err != nil { return err } defer out.Close() // Write the body to file _, err = io.Copy(out, resp.Body) return err}
带进度条的大文件下载
下面的示例是带有进度条的大文件下载,我们将响应主体传递到其中,io.Copy()但是如果使用a,TeeReader则可以传递计数器来跟踪进度。在下载时,我们还将文件另存为临时文件,因此在完全下载文件之前,我们不会覆盖有效文件。
package mainimport ( "fmt" "io" "net/http" "os" "strings" "github.com/dustin/go-humanize")type WriteCounter struct { Total uint64}func (wc *WriteCounter) Write(p []byte) (int, error) { n := len(p) wc.Total += uint64(n) wc.PrintProgress() return n, nil}func (wc WriteCounter) PrintProgress() { fmt.Printf("\r%s", strings.Repeat(" ", 35)) fmt.Printf("\rDownloading... %s complete", humanize.Bytes(wc.Total))}func main() { fmt.Println("Download Started") fileUrl := "http://topgoer.com/static/2/9.png" err := DownloadFile("9.png", fileUrl) if err != nil { panic(err) } fmt.Println("Download Finished")}func DownloadFile(filepath string, url string) error { out, err := os.Create(filepath + ".tmp") if err != nil { return err } resp, err := http.Get(url) if err != nil { out.Close() return err } defer resp.Body.Close() counter := &WriteCounter{} if _, err = io.Copy(out, io.TeeReader(resp.Body, counter)); err != nil { out.Close() return err } fmt.Print("\n") out.Close() if err = os.Rename(filepath+".tmp", filepath); err != nil { return err } return nil}
感谢各位的阅读,以上就是"go语言怎么实时显示下载进度"的内容了,经过本文的学习后,相信大家对go语言怎么实时显示下载进度这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
文件
进度
实时
语言
文件下载
学习
主体
内存
内容
示例
问题
不同
有效
就是
必将
思路
情况
数据
文章
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
炎性肠病数据库
天津工业软件开发公司有哪些
无线网络技术中范围最小
网络安全事件是指
数据库添加客户标签
微信怎么绑定多个服务器
邮件服务器怎么发送10封邮件
华三服务器外部健康灯闪烁
滁州保险软件开发定制
网络安全从业人员培训制度
实用网络技术考试题库
软件开发公司聚顶科技解决好
四级网络技术考过指南
数据库开归档日志目的
手机网络安全认证怎么去掉
特种网络技术价目表
网络安全等级保护制度3.0
软件开发行业法律
软件开发和测试环境维护管理办法
重庆欢聚时刻网络技术限公司
一键小巧的数据库搭建工具
java要学哪种数据库
云众互联网科技有限公司做什么的
康熙字典下载软件开发
虚拟主机与云服务器
ibm 服务器 错误代码
网络安全意识对联
数据库一体机有什么功能吗
数据库安全数据集
软件开发服务开票税率