Différences entre io.TeeReader et io.Copy
In 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 :
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))
Dans cet exemple, io.TeeReader nous permet d'imprimer simultanément les données copiées sur la sortie standard et de calculer le hachage MD5 en utilisant la fonction h.Sum(nil).
io.MultiWriter
Il convient de noter que la fonctionnalité de io.TeeReader peut également être obtenue en utilisant io.MultiWriter :
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))
io.MultiWriter combine plusieurs rédacteurs en une seule destination, permettant ainsi aux données d'être écrites simultanément dans plusieurs emplacements. Dans ce cas, h reçoit les données copiées pour le calcul du hachage, tandis que os.Stdout les affiche.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3