1. ホーム
  2. go

[解決済み] Goを使って大きなファイルを効率よくダウンロードするにはどうしたらいいですか?

2022-08-05 20:01:52

質問

Go を使用して大きなファイルをダウンロードするとき、ファイルに書き込む前にすべてをメモリに格納するのではなく、内容を直接ファイルに格納する方法はありますか? ファイルが非常に大きいので、ファイルに書き込む前にすべてをメモリに格納すると、メモリをすべて使ってしまいそうです。

どのように解決するのですか?

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のBodyはReaderなので、Readerを受け取る関数を使えば、例えば、一度に全部読むのではなく、一度にチャンクずつ読むことができます。この具体的な例では io.Copy() はあなたのために大変な仕事をします。