Rumah >pembangunan bahagian belakang >Golang >Mengapa Menyahmarshaling menjadi Penunjuk Tidak Dimulakan Gagal dalam Pergi?
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)
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)
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)
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!