io.Reader를 문자열로 효율적으로 변환
문제:
io.ReadCloser를 고려하세요. http.Response에서 얻은 객체입니다. 전체 스트림을 문자열로 효율적으로 변환하려면 어떻게 해야 합니까?
해결책:
Strings.Builder 사용(Go 1.10 이상):
이것은 Go 1.10에서 선호되고 가장 효율적인 방법이며 위:
import "strings" func ioReaderToString(r io.ReadCloser) (string, error) { buf := new(strings.Builder) if _, err := io.Copy(buf, r); err != nil { return "", err } return buf.String(), nil }
레거시 방법(Go <= 1.9의 경우):
[참고: 이 솔루션은 오래되었으며 권장되지 않습니다. Strings.Builder.]
import "bytes" buf := new(bytes.Buffer) if _, err := buf.ReadFrom(r); err != nil { return "", err }
s := buf.String()
안전하지 않은 방법(고급 및 위험):
[매우 주의해서 사용하세요]
import "bytes" buf := new(bytes.Buffer) if _, err := buf.ReadFrom(r); err != nil { return "", err }
b := buf.Bytes()
import "unsafe" s := *(*string)(unsafe.Pointer(&b))
안전하지 않음에 대한 주의 사항 방법:
권장 사항:
Strings.Builder 메서드는 효율적이고 안전하며 안전하지 않은 메서드의 함정을 피합니다.
위 내용은 Go에서 io.Reader를 문자열로 효율적으로 변환하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!