Heim > Backend-Entwicklung > Golang > Wie kann ich einen io.Reader für mehrere Lesevorgänge in Go duplizieren?

Wie kann ich einen io.Reader für mehrere Lesevorgänge in Go duplizieren?

Barbara Streisand
Freigeben: 2024-12-25 02:06:13
Original
815 Leute haben es durchsucht

How Can I Duplicate an io.Reader for Multiple Read Operations in Go?

Duplizieren von io.Reader-Instanzen für mehrere Vorgänge

Problem

Beim Arbeiten mit einem io.ReadCloser-Typ wie request.Body kann es problematisch sein wenn Sie mehrere Vorgänge ausführen möchten (z. B. in eine Datei schreiben und dekodieren). Direkte Aufrufe von ioutil.ReadAll() verbrauchen den gesamten Stream und machen nachfolgende Vorgänge unmöglich.

Lösung: Verwendung von io.TeeReader

Im Gegensatz zu direkten Lesevorgängen ermöglicht io.TeeReader Benutzern das Duplizieren eines io. Reader-Stream, der mehrere Verweise auf denselben Inhalt ermöglicht. Dies löst das Problem des zweimaligen Lesens derselben Daten.

Implementierung

Hier ist eine Implementierung mit io.TeeReader:

package main

import (
    "bytes"
    "io"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    r := strings.NewReader("io.Reader contents to be read")
    var buf bytes.Buffer
    tee := io.TeeReader(r, &buf)

    // Perform the first operation using tee.
    log.Println(ioutil.ReadAll(tee))

    // Perform the second operation using the duplicated content in the buffer.
    log.Println(ioutil.ReadAll(&buf))
}
Nach dem Login kopieren

Notizen

  • Denken Sie daran, zuerst aus dem TeeReader zu lesen, um den Puffer zu füllen.
  • Wenn Sie etwas erstellen müssen Für mehrere Verweise auf verschiedene Teile des Streams verwenden Sie io.MultiReader oder io.PipeReader.

Das obige ist der detaillierte Inhalt vonWie kann ich einen io.Reader für mehrere Lesevorgänge in Go duplizieren?. 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