Gérer plusieurs lectures à partir du même io.Reader
La lecture à partir d'un flux io.Reader ne peut être effectuée qu'une seule fois, car elle représente un flux de données séquentiel. Cependant, il existe des scénarios dans lesquels vous devrez peut-être lire les mêmes données à partir de plusieurs sources.
Une façon d'y parvenir consiste à utiliser io.TeeReader. Cette fonction crée un nouveau io.Reader qui duplique les données d'entrée, vous permettant de créer plusieurs instances avec des références distinctes au flux d'origine.
Par exemple :
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)) }
Dans cet exemple, ioutil.ReadAll() est d'abord appelé sur tee, qui lit et enregistre les données du flux d'origine. Ensuite, ioutil.ReadAll() est appelé sur &buf, qui imprime la copie des données du TeeReader.
Remarque : Il est important de lire depuis tee avant d'essayer de lire depuis buf. Sinon, le tampon sera vide.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!