Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `json.Unmarshal` Membuang `InvalidUnmarshalError` Apabila Menggunakan Penunjuk Tidak Dimulakan?
Baru-baru ini, pengguna telah melihat tingkah laku yang tidak dijangka menggunakan json.Unmarshal apabila menghantar penunjuk. Mari kita siasat mengapa perbezaan itu wujud.
Dalam dokumentasi rasmi, kami menemui kenyataan yang mencadangkan Unmarshal auto-peruntukkan nilai baharu untuk ditunjuk jika penunjuk pada mulanya sifar:
Unmarshal menyahmarshal JSON ke dalam nilai yang ditunjukkan oleh penunjuk. Jika penunjuk adalah sifar, Unmarshal memperuntukkan nilai baharu untuk ditunjuk.
Walau bagaimanapun, apabila cuba menggunakan Unmarshal dengan penuding yang tidak dimulakan, kami menghadapi InvalidUnmarshalError:
// An InvalidUnmarshalError menerangkan hujah yang tidak sah diserahkan kepada Unmarshal.
// (Hujah kepada Unmarshal mestilah penunjuk bukan nol.)
Ralat ini bercanggah dengan cadangan dokumentasi mengenai peruntukan memori automatik.
Untuk menyelesaikan percanggahan ini, adalah penting untuk menangani perbezaan halus antara menggunakan rujukan dan penunjuk. Dalam contoh pertama di mana kod berfungsi, penggunaan &animals mencipta rujukan kepada pembolehubah, memastikan ia sentiasa tidak sifar. Tingkah laku rujukan ini sejajar dengan kefungsian yang dijangkakan.
Sebaliknya, contoh kedua menggunakan penunjuk yang tidak dimulakan (*haiwan), yang mewakili hujah yang tidak sah di mata Unmarshal. Ralat yang dijananya menggambarkan isu ini dengan tepat.
Sebagai nota akhir, ejaan perkataan yang betul ialah "menyahmarshaling", mengikut dokumentasi rasmi.
Atas ialah kandungan terperinci Mengapakah `json.Unmarshal` Membuang `InvalidUnmarshalError` Apabila Menggunakan Penunjuk Tidak Dimulakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!