Maison  >  Article  >  développement back-end  >  Comment télécharger efficacement des fichiers volumineux en Go sans remplir la mémoire ?

Comment télécharger efficacement des fichiers volumineux en Go sans remplir la mémoire ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-13 12:58:02404parcourir

How to Efficiently Download Large Files in Go Without Filling Up Memory?

Télécharger efficacement des fichiers volumineux à l'aide de Go

Le stockage de fichiers volumineux en mémoire peut surcharger les ressources d'un ordinateur. Dans Go, comment pouvons-nous télécharger de tels fichiers directement, en évitant cette contrainte de mémoire ?

Réponse :

En supposant que le téléchargement se fasse via 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
}

Cette approche utilise le corps de réponse HTTP comme lecteur. Des fonctions comme io.Copy() peuvent fonctionner sur ce lecteur, nous permettant de traiter la réponse par morceaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn