go

¿Cómo canalizar una respuesta HTTP a un archivo en Go?



(1)

¿Cómo convierto el código a continuación para usar streams / pipe para que no tenga que leer todo el contenido en la memoria? Algo como: http.Get("http://example.com/").Pipe("./data.txt")

package main import ("net/http";"io/ioutil") func main() { resp, err := http.Get("http://example.com/") check(err) defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) check(err) err = ioutil.WriteFile("./data.txt", body, 0666) check(err) } func check(e error) { if e != nil { panic(e) } }


¿Qué hay de io.Copy() ? Su documentación se puede encontrar en: http://golang.org/pkg/io/#Copy

Aunque es bastante simple. Dale un io.Reader y un io.Writer y copia los datos, una pequeña parte a la vez (por ejemplo, no todos en la memoria a la vez).

Así que puedes intentar escribir algo como:

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) }

No he probado lo anterior; Simplemente lo hackeé rápidamente de su ejemplo anterior, pero debería estar cerca si no fuera por el dinero.