http.Response에서 얻은 것과 같은 io.ReadCloser 객체가 있는 경우 전체를 변환합니다. 문자열로 스트리밍하려면 바이트 배열의 전체 복사본이 필요합니다. 이것이 가장 효율적인 작업은 아닐 수도 있지만 변환을 수행하는 표준적이고 안전한 방법입니다.
변환을 수행하려면 다음 단계를 사용할 수 있습니다.
buf := new(bytes.Buffer) buf.ReadFrom(yourReader) s := buf.String() // Performs a complete copy of the bytes in the buffer.
경우에 따라 바이트 배열을 문자열로 직접 변환하려고 하면 Go에서 문자열을 변경할 수 없는 것과 관련된 유형 안전성 문제가 발생하게 됩니다. 그러나 안전하지 않은 패키지를 사용하면 이러한 유형의 안전 메커니즘을 우회할 수 있습니다. 안전하지 않은 패키지로 작업할 때는 예상치 못한 결과를 초래할 수 있으므로 주의하십시오.
다음은 안전하지 않은 패키지를 사용하는 예입니다.
buf := new(bytes.Buffer) buf.ReadFrom(yourReader) b := buf.Bytes() s := *(*string)(unsafe.Pointer(&b))
이 방법이 더 효율적으로 보일 수 있지만, 단점:
따라서 일반적으로 바이트를 버퍼링한 다음 문자열로 변환합니다. 이 접근 방식에 비해 문자열 크기가 너무 커지면 스트리밍 또는 증분 처리와 같은 대체 방법을 고려해 볼 가치가 있습니다.
위 내용은 Go에서 io.Reader를 문자열로 효율적으로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!