Heim > Backend-Entwicklung > Golang > Wie lese ich mehrmals von einem io.Reader?

Wie lese ich mehrmals von einem io.Reader?

Barbara Streisand
Freigeben: 2024-12-16 14:26:18
Original
333 Leute haben es durchsucht

How to Read from an io.Reader Multiple Times?

So lesen Sie mehrmals aus demselben io.Reader

Beim Arbeiten mit einem io.Reader, z. B. request.Body, der Enthält Daten wie ein Bild, kann es sein, dass Sie mehrmals auf den Inhalt zugreifen müssen. Die Verwendung von ioutil.ReadAll() würde jedoch den gesamten Inhalt verbrauchen, was nachfolgende Lesevorgänge unmöglich macht.

Die Herausforderung

Versuch, mehrere Instanzen des Readers zu erstellen, wie gezeigt führt im folgenden Code zu einem Nullwert für den zweiten Aufruf:

package main

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

func main() {
    r := strings.NewReader("some io.Reader stream to be read\n")
    a := &r
    b := &r
    log.Println(ioutil.ReadAll(*a))
    log.Println(ioutil.ReadAll(*b))
}
Nach dem Login kopieren

Die Lösung: TeeReader

Um mehrmals aus demselben io.Reader zu lesen, können Sie den io.TeeReader verwenden. Es dupliziert den Stream, sodass Sie gleichzeitig aus mehreren Quellen lesen können.

package main

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

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

    log.Println(ioutil.ReadAll(tee))
    log.Println(ioutil.ReadAll(&buf))
}
Nach dem Login kopieren

Beispiel:

Im obigen Beispiel erstellen Sie zunächst einen TeeReader, der liest vom Originalleser und einem Puffer. Anschließend lesen Sie aus dem TeeReader und dem Puffer, um zweimal denselben Inhalt zu erhalten.

Das obige ist der detaillierte Inhalt vonWie lese ich mehrmals von einem io.Reader?. 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