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!