¿Existe alguna forma de descargar un archivo grande usando Go que almacene el contenido directamente en un archivo en lugar de almacenarlo todo en la memoria antes de escribirlo en un archivo? Debido a que el archivo es tan grande, almacenarlo todo en la memoria antes de escribirlo en un archivo consumirá toda la memoria.
106
io.Copy
lee 32 kb (máximo) desde la entrada y los escribe en la salida, luego repite. Así que no te preocupes por la memoria.client := http.Client{Timeout: 10 * time.Second,} client.Get("http://example.com/")
Una versión más descriptiva de la respuesta de Steve M.
fuente
La respuesta seleccionada anteriormente
io.Copy
es exactamente lo que necesita, pero si está interesado en funciones adicionales como reanudar descargas interrumpidas, nombres de archivos automáticos, validación de suma de verificación o monitoreo del progreso de múltiples descargas, consulte el paquete de captura .fuente
He aquí una muestra. https://github.com/thbar/golang-playground/blob/master/download-files.go
También te doy algunos códigos que pueden ayudarte.
código:
fuente
ioutil.ReadAll()
. Eso está bien, siempre y cuando se trate de archivos pequeños.