Apabila anda mempunyai objek io.ReadCloser, seperti yang diperoleh daripada http.Response, menukar keseluruhan strim ke rentetan memerlukan salinan lengkap tatasusunan bait. Walaupun ini mungkin bukan operasi yang paling cekap, ia adalah cara standard dan selamat untuk mencapai penukaran ini.
Untuk melakukan penukaran, anda boleh menggunakan langkah berikut:
buf := new(bytes.Buffer) buf.ReadFrom(yourReader) s := buf.String() // Performs a complete copy of the bytes in the buffer.
Jika anda cuba menukar tatasusunan bait terus kepada rentetan, anda akan menghadapi isu keselamatan jenis yang berkaitan dengan rentetan yang tidak boleh diubah dalam Go. Walau bagaimanapun, menggunakan pakej yang tidak selamat membolehkan anda memintas mekanisme keselamatan jenis ini. Berhati-hati apabila menggunakan pakej yang tidak selamat, kerana ia boleh membawa kepada akibat yang tidak dijangka.
Berikut ialah contoh menggunakan pakej yang tidak selamat:
buf := new(bytes.Buffer) buf.ReadFrom(yourReader) b := buf.Bytes() s := *(*string)(unsafe.Pointer(&b))
Walaupun kaedah ini kelihatan lebih cekap, kaedah ini mempunyai kelemahannya:
Oleh itu, secara amnya disyorkan untuk berpegang pada pendekatan standard dan selamat untuk menyalin bait ke dalam penimbal dan kemudian menukar kepada rentetan. Jika saiz rentetan menjadi terlalu besar untuk pendekatan ini, kaedah alternatif mungkin perlu dipertimbangkan, seperti penstriman atau pemprosesan tambahan.
Atas ialah kandungan terperinci Bagaimana Saya Menukar io.Reader kepada String in Go dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!