高效地将 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
[注意:此解决方案已过时,不推荐使用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中文网其他相关文章!