io.TeeReader と io.Copy の違い
Go では、io.TeeReader と io.Copy は io からのデータ転送を容易にします。 Reader から io.Writer へ。どちらの関数もこの目的を果たしますが、異なる機能を提供します。
io.Copy
io.Copy は、ソース リーダーからデータを効率的にコピーするシンプルで簡単な関数です。宛先のライターに。データ転送のみに焦点を当てており、値は返しません。
io.TeeReader
io.TeeReader は、より多用途なアプローチを提供します。 io.Copy とは異なり、io.TeeReader は元のリーダーをラップする新しい io.Reader を作成します。この新しいリーダーから読み取るとき、データは提供された io.Writer に同時に書き込まれます。この機能は、コピーされたデータの検査と処理の両方が必要な場合に役立ちます。
使用例
違いを説明するために、データをコピーする必要があるシナリオを考えてみましょう。コピーされたコンテンツの MD5 ハッシュを計算しながら、リーダーを標準出力に出力します。
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>
この例では、io.TeeReader を使用して、コピーされたコンテンツを同時に印刷できます。データを標準出力に変換し、h.Sum(nil) 関数を使用して MD5 ハッシュを計算します。
io.MultiWriter
io.TeeReader の機能はまた、これは、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 を使用して実現されます。io.MultiWriter は、複数のライターを 1 つの宛先に結合し、データを複数の場所に同時に書き込むことが効果的に可能になります。この場合、h はハッシュ計算のためにコピーされたデータを受け取り、os.Stdout はそれを表示します。
以上がGo における io.TeeReader と io.Copy の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。