>백엔드 개발 >Golang >Go에서 동일한 io.Reader를 여러 번 읽으려면 어떻게 해야 합니까?

Go에서 동일한 io.Reader를 여러 번 읽으려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-14 12:14:11548검색

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

동일한 io.Reader에서 여러 읽기 처리

io.Reader 스트림에서 읽기는 한 번만 수행할 수 있습니다. 순차적 데이터 스트림. 그러나 여러 소스에서 동일한 데이터를 읽어야 하는 시나리오가 있습니다.

이를 달성하는 한 가지 방법은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.