Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah saya Boleh Menukar io.Reader kepada String in Go dengan Cekap?

Bagaimanakah saya Boleh Menukar io.Reader kepada String in Go dengan Cekap?

Linda Hamilton
Lepaskan: 2024-12-29 13:46:12
asal
219 orang telah melayarinya

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

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
}
Salin selepas log masuk

Kaedah Warisan (For Go <= 1.9):

[Nota: Penyelesaian ini sudah lapuk dan tidak disyorkan memihak kepada Strings.Builder.]

  1. Baca strim ke dalam bytes.Buffer:
import "bytes"

buf := new(bytes.Buffer)
if _, err := buf.ReadFrom(r); err != nil {
    return "", err
}
Salin selepas log masuk
Salin selepas log masuk
  1. Tukar penimbal kepada rentetan (operasi penyalinan yang tidak cekap berlaku di sini):
s := buf.String()
Salin selepas log masuk

Kaedah Tidak Selamat (Lanjutan dan Berisiko):

[Gunakan dengan sangat berhati-hati]

  1. Baca strim ke dalam bait. Penampan:
import "bytes"

buf := new(bytes.Buffer)
if _, err := buf.ReadFrom(r); err != nil {
    return "", err
}
Salin selepas log masuk
Salin selepas log masuk
  1. Tukar penimbal kepada bait keping:
b := buf.Bytes()
Salin selepas log masuk
  1. Tidak selamat tukar kepingan bait kepada rentetan:
import "unsafe"

s := *(*string)(unsafe.Pointer(&b))
Salin selepas log masuk

Kaveat Tidak Selamat Kaedah:

  • Mungkin tidak berfungsi dalam semua penyusun atau seni bina.
  • Rentetan yang terhasil boleh berubah, berpotensi membawa kepada gelagat yang tidak dijangka.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan