request.Body와 같은 io.ReadCloser 유형으로 작업할 때 문제가 발생할 수 있습니다. 여러 작업(예: 파일에 쓰기 및 디코딩)을 수행하려는 경우. ioutil.ReadAll()에 대한 직접 호출은 전체 스트림을 소비하므로 후속 작업이 불가능합니다.
직접 읽기와 달리 io.TeeReader를 사용하면 사용자가 io를 복제할 수 있습니다. 동일한 콘텐츠에 대한 여러 참조를 가능하게 하는 리더 스트림입니다. 이는 동일한 데이터를 두 번 읽는 문제를 해결합니다.
다음은 io.TeeReader를 사용한 구현입니다.
package main import ( "bytes" "io" "io/ioutil" "log" "strings" ) func main() { r := strings.NewReader("io.Reader contents to be read") var buf bytes.Buffer tee := io.TeeReader(r, &buf) // Perform the first operation using tee. log.Println(ioutil.ReadAll(tee)) // Perform the second operation using the duplicated content in the buffer. log.Println(ioutil.ReadAll(&buf)) }
위 내용은 Go에서 다중 읽기 작업을 위해 io.Reader를 어떻게 복제할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!