Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich große Dateien effizient in Go herunterladen, ohne den Speicher zu füllen?

Wie kann ich große Dateien effizient in Go herunterladen, ohne den Speicher zu füllen?

Barbara Streisand
Barbara StreisandOriginal
2024-11-13 12:58:02341Durchsuche

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

Effizientes Herunterladen großer Dateien mit Go

Das Speichern großer Dateien im Speicher kann die Ressourcen eines Computers überfordern. Wie können wir in Go solche Dateien direkt herunterladen und so diese Speicherbeschränkung vermeiden?

Antwort:

Angenommen, der Download erfolgt über 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
}

Dieser Ansatz nutzt den HTTP-Antworttext als Reader. Funktionen wie io.Copy() können auf diesem Reader ausgeführt werden, sodass wir die Antwort in Blöcken verarbeiten können.

Das obige ist der detaillierte Inhalt vonWie kann ich große Dateien effizient in Go herunterladen, ohne den Speicher zu füllen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn