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

Barbara Streisand
Freigeben: 2024-11-13 12:58:02
Original
346 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage