Maison  >  Article  >  développement back-end  >  En quoi io.TeeReader et io.Copy diffèrent-ils dans Go ?

En quoi io.TeeReader et io.Copy diffèrent-ils dans Go ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-25 07:42:02770parcourir

How do io.TeeReader and io.Copy differ in Go?

Différences entre io.TeeReader et io.Copy

Dans Go, io.TeeReader et io.Copy facilitent le transfert de données depuis un io. Lecteur vers un io.Writer. Bien que les deux fonctions répondent à cet objectif, elles offrent des fonctionnalités distinctes.

io.Copy

io.Copy est une fonction simple et directe qui copie efficacement les données d'un lecteur source. à un écrivain de destination. Il se concentre uniquement sur le transfert de données et ne renvoie aucune valeur.

io.TeeReader

io.TeeReader offre une approche plus polyvalente. Contrairement à io.Copy, io.TeeReader crée un nouveau io.Reader qui enveloppe le lecteur d'origine. Lors de la lecture à partir de ce nouveau lecteur, les données sont simultanément écrites sur le io.Writer fourni. Cette fonctionnalité est utile lorsque vous devez à la fois inspecter et traiter les données copiées.

Exemple d'utilisation

Pour illustrer la différence, considérons un scénario dans lequel nous devons copier des données de un lecteur vers la sortie standard tout en calculant également le hachage MD5 du contenu copié.

Utilisation de io.TeeReader :

<code class="go">r := io.TeeReader(strings.NewReader(s), os.Stdout)
h := md5.New()
if _, err := io.Copy(h, r); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))</code>

Dans cet exemple, io.TeeReader nous permet d'imprimer simultanément le données vers la sortie standard et calculez le hachage MD5 à l'aide de la fonction h.Sum(nil).

io.MultiWriter

Il convient de noter que la fonctionnalité de io.TeeReader peut également être réalisé en utilisant io.MultiWriter :

<code class="go">mw := io.MultiWriter(h, os.Stdout)
if _, err := io.Copy(mw, strings.NewReader(s)); err != nil { panic(err) }
fmt.Printf("Hash: %x\n", h.Sum(nil))</code>

io.MultiWriter combine plusieurs rédacteurs en une seule destination, permettant ainsi d'écrire des données simultanément à plusieurs emplacements. Dans ce cas, h reçoit les données copiées pour le calcul du hachage, tandis que os.Stdout les affiche.

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