Ответ 1
Как насчет io.Copy()
? Его документацию можно найти по адресу: http://golang.org/pkg/io/#Copy
Это довольно просто. Дайте ему io.Reader
и io.Writer
, и он копирует данные за один маленький кусок за раз (например, не все в памяти сразу).
Итак, вы можете попробовать написать что-то вроде:
func main() {
resp, err := http.Get("...")
check(err)
defer resp.Body.Close()
out, err := os.Create("filename.ext")
if err != nil {
// panic?
}
defer out.Close()
io.Copy(out, resp.Body)
}
Я не тестировал выше; Я просто быстро взломал его из вашего примера, но он должен быть близок, если не на деньги.