ホームページ > バックエンド開発 > Golang > メモリを満杯にすることなく、Go で大きなファイルを効率的にダウンロードするにはどうすればよいですか?

メモリを満杯にすることなく、Go で大きなファイルを効率的にダウンロードするにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-13 12:58:02
オリジナル
434 人が閲覧しました

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 の応答本文をリーダーとして利用します。 io.Copy() のような関数はこの Reader 上で動作し、応答をチャンクで処理できるようになります。

以上がメモリを満杯にすることなく、Go で大きなファイルを効率的にダウンロードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート