"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go에서 io.Reader를 문자열로 효율적으로 변환하려면 어떻게 해야 합니까?

Go에서 io.Reader를 문자열로 효율적으로 변환하려면 어떻게 해야 합니까?

2024년 12월 22일에 게시됨
검색:804

How Do I Efficiently Convert an io.Reader to a String in Go?

io.Reader에서 읽고 Go에서 문자열로 변환

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 공식 사양에서 보장되지 않습니다.
  • 결과 문자열은 변경 가능하므로 예측할 수 없는 결과가 발생할 수 있습니다. 동작.

따라서 일반적으로 바이트를 버퍼에 복사한 다음 문자열로 변환하는 표준적이고 안전한 접근 방식을 고수하는 것이 좋습니다. 이 접근 방식에 비해 문자열 크기가 너무 커지면 스트리밍 또는 증분 처리와 같은 대체 방법을 고려해 볼 가치가 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3