Wie können Sie Dateien als Stream in go hochladen?

Es gibt eine Reihe von Tutorials zum Posten von Dateien mithttp.Request in go, aber fast immer fangen sie so an:

file, err := os.Open(path)
if err != nil {
    return nil, err
}
fileContents, err := ioutil.ReadAll(file)

Was soll heißen, Sie lesen die gesamte Datei in den Speicher und konvertieren sie dann in einBuffer und übergebe das in eine Anfrage, etwa so:

func send(client *http.Client, file *os.File, endpoint string) {
    body := &bytes.Buffer{}
    io.Copy(body, file)
    req, _ := http.NewRequest("POST", endpoint, body)
    resp, _ := client.Do(req)
}

Wenn Sie eine massive Datei veröffentlichen und vermeiden möchten, sie in den Speicher zu lesen, sondern die Datei in Stücken zu dämpfen ... wie würden Sie das tun?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage