ホームページ >バックエンド開発 >Golang >Go で同じ io.Reader から複数回読み取るにはどうすればよいですか?

Go で同じ io.Reader から複数回読み取るにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-14 12:14:11546ブラウズ

How Can I Read from the Same io.Reader Multiple Times in Go?

同じ io.Reader からの複数の読み取りの処理

io.Reader ストリームからの読み取りは、シーケンシャルデータストリーム。ただし、複数のソースから同じデータを読み取る必要があるシナリオもあります。

これを実現する 1 つの方法は、io.TeeReader を使用することです。この関数は、入力データを複製する新しい io.Reader を作成し、元のストリームへの個別の参照を持つ複数のインスタンスを作成できるようにします。

例:

package main

import (
    "bytes"
    "io"
    "io/ioutil"
    "log"
    "strings"
)

func main() {
    r := strings.NewReader("some io.Reader stream to be read\n")
    var buf bytes.Buffer
    tee := io.TeeReader(r, &buf)

    log.Println(ioutil.ReadAll(tee))
    log.Println(ioutil.ReadAll(&buf))
}

この例では、 ioutil.ReadAll() は最初に tee で呼び出され、元のストリームからデータを読み取り、ログに記録します。次に、&buf で ioutil.ReadAll() が呼び出され、TeeReader からのデータのコピーが出力されます。

注: buf から読み取る前に、Tee から読み取ることが重要です。それ以外の場合、バッファは空になります。

以上がGo で同じ io.Reader から複数回読み取るにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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