Maison > développement back-end > Golang > Comment lire plusieurs fois à partir d'un io.Reader ?

Comment lire plusieurs fois à partir d'un io.Reader ?

Barbara Streisand
Libérer: 2024-12-16 14:26:18
original
335 Les gens l'ont consulté

How to Read from an io.Reader Multiple Times?

Comment lire à partir du même io.Reader plusieurs fois

Lorsque vous travaillez avec un io.Reader, tel que request.Body, qui contient des données comme une image, vous devrez peut-être accéder au contenu plusieurs fois. Cependant, l'utilisation de ioutil.ReadAll() consommerait l'intégralité du contenu, rendant les lectures ultérieures impossibles.

Le défi

Tenter de créer plusieurs instances du lecteur, comme indiqué dans le code ci-dessous, donne une valeur nulle pour le deuxième appel :

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))
}
Copier après la connexion

La solution : TeeReader

Pour lire plusieurs fois à partir du même io.Reader, vous pouvez utiliser le io.TeeReader. Il duplique le flux, vous permettant de lire simultanément à partir de plusieurs sources.

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))
}
Copier après la connexion

Exemple :

Dans l'exemple ci-dessus, vous créez d'abord un TeeReader qui lit du lecteur d'origine et un tampon. Ensuite, vous lisez depuis le TeeReader et le tampon pour obtenir deux fois le même contenu.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal