Rumah > pembangunan bahagian belakang > Golang > Mengapa Menyahmarshaling menjadi Penunjuk Tidak Dimulakan Gagal dalam Pergi?

Mengapa Menyahmarshaling menjadi Penunjuk Tidak Dimulakan Gagal dalam Pergi?

Mary-Kate Olsen
Lepaskan: 2024-11-21 00:50:12
asal
924 orang telah melayarinya

Why Does Unmarshaling into an Uninitialized Pointer Fail in Go?

Menyahmarshall menjadi Rujukan dan Penunjuk

Dalam proses menyahsiri data JSON ke dalam struktur Go, fungsi json.Unmarshal memainkan peranan yang penting. Walau bagaimanapun, pengguna mungkin menghadapi percanggahan apabila cuba menyahmarshal ke dalam rujukan dan penunjuk.

Pertimbangkan coretan kod berikut:

// Unmarshaling into a reference variable
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)
Salin selepas log masuk

Kod ini berjaya menyahmarshal data JSON ke dalam pembolehubah rujukan haiwan.

Walau bagaimanapun, hasil yang berbeza timbul apabila cuba unmarshal menjadi penunjuk pembolehubah:

// Unmarshaling into a pointer variable
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)
Salin selepas log masuk

Dalam kes ini, Unmarshal gagal dengan ralat yang tidak jelas: "json: Unmarshal(nil *main.Animal)". Ralat ini ditemui kerana haiwan ialah penunjuk yang tidak dimulakan.

Dokumentasi untuk Unmarshal menyatakan bahawa "Jika penunjuk itu tiada, Unmarshal memperuntukkan nilai baharu untuk ditunjuk." Walau bagaimanapun, tingkah laku ini nampaknya tidak terpakai dalam kes penunjuk yang tidak dimulakan, seperti yang dibuktikan oleh mesej ralat.

Untuk menyelesaikan isu ini, adalah disyorkan untuk memulakan haiwan pemboleh ubah penunjuk sebelum cuba menyahmarshal ke dalamnya:

animals = &Animal{}
err := json.Unmarshal(jsonBlob, animals)
Salin selepas log masuk

Dengan pengubahsuaian ini, proses unmarshaling sepatutnya berjaya.

Perhatikan bahawa dalam dokumentasi, istilah "unmarshaling" digunakan secara konsisten.

Atas ialah kandungan terperinci Mengapa Menyahmarshaling menjadi Penunjuk Tidak Dimulakan Gagal dalam Pergi?. 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