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
Linda Hamiltonasal
2024-12-29 13:46:12222semak imbas

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
}

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
}
  1. Tukar penimbal kepada rentetan (operasi penyalinan yang tidak cekap berlaku di sini):
s := buf.String()

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
}
  1. Tukar penimbal kepada bait keping:
b := buf.Bytes()
  1. Tidak selamat tukar kepingan bait kepada rentetan:
import "unsafe"

s := *(*string)(unsafe.Pointer(&b))

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!

Kenyataan:
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