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 サイトの他の関連記事を参照してください。