Go の 2 つの基本的な I/O 構造である io.TeeReader と io.Copy には、ファイルからの読み取りという共通点があります。読者と作家への書き込み。ただし、微妙だが重要な違いがあります。
io.Copy:
io.Copy は、入力リーダーと出力ライターの間でデータを意識せずに転送する単純な関数です。 。その唯一の目的は、コピーされたデータへのアクセスを提供せずにデータの移動を容易にすることです。
io.TeeReader:
対照的に、io.TeeReader は直接的なものではありません。データコピー機。代わりに、中間の io.Reader を作成して返します。この io.Reader からの読み取りと同時に、構築中に提供される io.Writer にデータが書き込まれます。
実際の比較:
io.TeeReader と io の微妙な違い。コピーは、コピーされたデータへのアクセスが重要なシナリオで顕著になります。リーダーからライターに転送されるデータの MD5 ハッシュを計算する必要がある状況を考えてみましょう。
io.TeeReader の使用:
<code class="go">r := io.TeeReader(strings.NewReader("Hello World"), os.Stdout) // ... Perform calculations on data read from r</code>
このアプローチでは、両方のデータを宛先 (この場合は os.Stdout) に送信し、MD5 ハッシュの計算などの計算のためにそれにアクセスします。
io.Copy と io.MultiWriter の使用:
<code class="go">h := md5.New() mw := io.MultiWriter(h, os.Stdout) // ... Copy data to mw</code>
このアプローチは、io.TeeReader を使用する場合と同じ目標を達成します。宛先と MD5 ハッシュの両方に書き込むために io.MultiWriter を明示的に作成する必要があります。
以上がデータ転送と処理に `io.TeeReader` と `io.Copy` を使用するのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。