io.TeeReader et io.Copy, deux constructions d'E/S fondamentales dans Go, partagent un point commun dans la lecture à partir d'un lecteur et écrire à un écrivain. Cependant, ils présentent des différences subtiles mais importantes.
io.Copy :
io.Copy est une fonction simple qui transfère sans réfléchir des données entre un lecteur d'entrée et un rédacteur de sortie. . Son seul objectif est de faciliter le mouvement des données sans donner accès aux données copiées.
io.TeeReader :
En revanche, io.TeeReader n'est pas un copieur de données. Au lieu de cela, il crée et renvoie un io.Reader intermédiaire. La lecture de ce io.Reader écrit simultanément les données dans un io.Writer fourni lors de la construction.
Comparaison pratique :
La distinction nuancée entre io.TeeReader et io. La copie devient évidente dans les scénarios où l'accès aux données copiées est crucial. Prenons une situation dans laquelle vous devez calculer le hachage MD5 des données transférées d'un lecteur à un écrivain.
Utilisation de io.TeeReader :
<code class="go">r := io.TeeReader(strings.NewReader("Hello World"), os.Stdout) // ... Perform calculations on data read from r</code>
Cette approche vous permet à la fois d'écrire le données vers une destination (os.Stdout dans ce cas) et accédez-y pour des calculs, tels que le calcul du hachage MD5.
Utilisation de io.Copy et io.MultiWriter :
<code class="go">h := md5.New() mw := io.MultiWriter(h, os.Stdout) // ... Copy data to mw</code>
Pendant que cette approche atteint le même objectif que l'utilisation de io.TeeReader, elle nécessite la création explicite d'un io.MultiWriter pour écrire à la fois sur la destination et sur le hachage MD5.
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!