Maison >développement back-end >Golang >Comment puis-je lire plusieurs fois à partir du même io.Reader en Go ?

Comment puis-je lire plusieurs fois à partir du même io.Reader en Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-14 12:14:11551parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn