go语言怎么实时显示下载进度

47次阅读
没有评论

共计 1989 个字符,预计需要花费 5 分钟才能阅读完成。

这篇文章主要讲解了“go 语言怎么实时显示下载进度”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“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 语言怎么实时显示下载进度这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-01发表,共计1989字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)