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.
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.
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)) }
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!