Menukar Rentetan UTF-8 kepada []bait untuk JSON Unmarshalling
Untuk menyahmarshal rentetan JSON dalam Go, kami perlu menyediakan [ ]potongan bait sebagai input. Jika kita hanya mempunyai rentetan UTF-8, bagaimana kita boleh menukarnya kepada []bait?
Penukaran Mudah dan Rentetan kepada []bait Salin
Jenis Go sistem membenarkan kami menukar terus daripada rentetan kepada []bait menggunakan:
s := "some text" b := []byte(s) // b is type []byte
Walau bagaimanapun, operasi ini mencipta salinan rentetan, yang boleh menjadi tidak cekap untuk rentetan besar.
Penukaran Cekap Menggunakan io.Reader
Penyelesaian alternatif melibatkan mencipta io.Reader menggunakan rentetan.NewReader():
s := `{"somekey":"somevalue"}` r := strings.NewReader(s)
io.Reader ini kemudiannya boleh diluluskan kepada json.NewDecoder() untuk unmarshalling tanpa membuat salinan rentetan:
var result interface{} err := json.NewDecoder(r).Decode(&result)
Overhead Considerations
Menggunakan strings.NewReader() dan json.NewDecoder() mempunyai beberapa overhed, jadi untuk rentetan JSON kecil, menukar kepada []bait secara langsung mungkin lebih cekap:
s := `{"somekey":"somevalue"}` var result interface{} err := json.Unmarshal([]byte(s), &result)
Input Pembaca io Langsung
Jika rentetan JSON input tersedia sebagai io.Reader (cth., fail atau sambungan rangkaian), ia boleh dihantar terus ke json.NewDecoder():
var result interface{} err := json.NewDecoder(myReader).Decode(&result)
Ini menghapuskan keperluan untuk penukaran atau salinan perantaraan.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Rentetan UTF-8 dengan Cekap kepada []bait untuk JSON Unmarshalling dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!