一尘不染

如何使用Go有效地下载大文件?

go

是否有一种使用Go下载大文件的方法,该方法会将内容直接存储到文件中,而不是将所有内容都存储到内存中再写入文件?由于文件太大,因此在将其全部写入内存之前将其全部存储在内存中将耗尽所有内存。


阅读 203

收藏
2020-07-02

共1个答案

一尘不染

我假设您的意思是通过http下载(为简便起见,省略了错误检查):

import ("net/http"; "io"; "os")
...
out, err := os.Create("output.txt")
defer out.Close()
...
resp, err := http.Get("http://example.com/")
defer resp.Body.Close()
...
n, err := io.Copy(out, resp.Body)

http.Response的主体是阅读器,因此您可以使用带有阅读器的任何功能,例如一次读取一个块,而不是一次读取所有块。在这种情况下,您会io.Copy()做些麻烦的事情。

2020-07-02