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