首頁  >  文章  >  後端開發  >  Go中如何有效率地下載大檔案而不佔記憶體?

Go中如何有效率地下載大檔案而不佔記憶體?

Barbara Streisand
Barbara Streisand原創
2024-11-13 12:58:02341瀏覽

How to Efficiently Download Large Files in Go Without Filling Up Memory?

使用 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn