使用 Go 高效下载大文件
在内存中存储大文件可能会压垮计算机的资源。在 Go 中,我们如何直接下载此类文件,避免这种内存限制?
答案:
假设通过 HTTP 下载:
import ( "net/http" "io" "os" ) func DownloadFile(url, filepath string) (int64, error) { // Open the destination file out, err := os.Create(filepath) if err != nil { return 0, err } defer out.Close() // Start the HTTP request resp, err := http.Get(url) if err != nil { return 0, err } defer resp.Body.Close() // Stream the response body into the file (avoiding full buffering) n, err := io.Copy(out, resp.Body) if err != nil { return 0, err } return n, nil }
这种方法利用 HTTP 的响应主体作为 Reader。像 io.Copy() 这样的函数可以在此 Reader 上进行操作,使我们能够分块处理响应。
以上是Go中如何高效下载大文件而不占内存?的详细内容。更多信息请关注PHP中文网其他相关文章!