ホームページ  >  記事  >  バックエンド開発  >  Go における io.TeeReader と io.Copy の違いは何ですか?

Go における io.TeeReader と io.Copy の違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-25 07:42:02770ブラウズ

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

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。