Heim >Backend-Entwicklung >Golang >Wie kann ich in Go mehrmals aus demselben io.Reader lesen?

Wie kann ich in Go mehrmals aus demselben io.Reader lesen?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-14 12:14:11548Durchsuche

How Can I Read from the Same io.Reader Multiple Times in Go?

Verarbeitung mehrerer Lesevorgänge aus demselben io.Reader

Das Lesen aus einem io.Reader-Stream kann nur einmal erfolgen, da es sich um einen handelt sequentielle Datenstrom. Es gibt jedoch Szenarien, in denen Sie möglicherweise dieselben Daten aus mehreren Quellen lesen müssen.

Eine Möglichkeit, dies zu erreichen, ist die Verwendung von io.TeeReader. Diese Funktion erstellt einen neuen io.Reader, der die Eingabedaten dupliziert, sodass Sie mehrere Instanzen mit separaten Verweisen auf den ursprünglichen Stream erstellen können.

Zum Beispiel:

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

In diesem Beispiel ioutil.ReadAll() wird zuerst auf tee aufgerufen, das die Daten aus dem ursprünglichen Stream liest und protokolliert. Dann wird ioutil.ReadAll() auf &buf aufgerufen, das die Kopie der Daten vom TeeReader druckt.

Hinweis: Es ist wichtig, von tee zu lesen, bevor Sie versuchen, von buf zu lesen. Andernfalls ist der Puffer leer.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go mehrmals aus demselben io.Reader lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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