Menukar io.Reader ke Rentetan dengan Cekap
Masalah:
Pertimbangkan io.ReadCloser objek yang diperoleh daripada http.Response. Bagaimanakah seseorang boleh menukar keseluruhan strim menjadi rentetan dengan cekap?
Penyelesaian:
Menggunakan Strings.Builder (For Go 1.10 dan Kemudian):
Ini adalah kaedah pilihan dan paling berkesan untuk Go 1.10 dan di atas:
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 }
Kaedah Warisan (For Go <= 1.9):
[Nota: Penyelesaian ini sudah lapuk dan tidak disyorkan memihak kepada Strings.Builder.]
import "bytes" buf := new(bytes.Buffer) if _, err := buf.ReadFrom(r); err != nil { return "", err }
s := buf.String()
Kaedah Tidak Selamat (Lanjutan dan Berisiko):
[Gunakan dengan sangat berhati-hati]
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))
Kaveat Tidak Selamat Kaedah:
Cadangan:
Berpegang pada kaedah Strings.Builder kerana ia cekap, selamat dan mengelakkan perangkap kaedah yang tidak selamat.
Atas ialah kandungan terperinci Bagaimanakah saya Boleh Menukar io.Reader kepada String in Go dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!