Maison >développement back-end >Golang >Comment puis-je dupliquer un io.Reader pour plusieurs opérations de lecture dans Go ?

Comment puis-je dupliquer un io.Reader pour plusieurs opérations de lecture dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-25 02:06:13816parcourir

How Can I Duplicate an io.Reader for Multiple Read Operations in Go?

Duplication d'instances io.Reader pour plusieurs opérations

Problème

Lorsque vous travaillez avec un type io.ReadCloser comme request.Body, cela peut être problématique lorsque vous souhaitez effectuer plusieurs opérations (par exemple, écrire dans un fichier et décoder). Les appels directs à ioutil.ReadAll() consomment l'intégralité du flux, rendant les opérations ultérieures impossibles.

Solution : Utilisation de io.TeeReader

Contrairement aux lectures directes, io.TeeReader permet aux utilisateurs de dupliquer un io. Flux de lecture, permettant plusieurs références au même contenu. Cela résout le problème de la lecture deux fois des mêmes données.

Implémentation

Voici une implémentation utilisant io.TeeReader :

package main

import (
    "bytes"
    "io"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    r := strings.NewReader("io.Reader contents to be read")
    var buf bytes.Buffer
    tee := io.TeeReader(r, &buf)

    // Perform the first operation using tee.
    log.Println(ioutil.ReadAll(tee))

    // Perform the second operation using the duplicated content in the buffer.
    log.Println(ioutil.ReadAll(&buf))
}

Notes

  • N'oubliez pas de lire d'abord depuis le TeeReader pour remplir le tampon.
  • Si vous en avez besoin créez plusieurs références à différentes parties du flux, utilisez io.MultiReader ou io.PipeReader.

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