Rumah > pembangunan bahagian belakang > Golang > Mengapakah `json.Unmarshal` Membuang `InvalidUnmarshalError` Apabila Menggunakan Penunjuk Tidak Dimulakan?

Mengapakah `json.Unmarshal` Membuang `InvalidUnmarshalError` Apabila Menggunakan Penunjuk Tidak Dimulakan?

Susan Sarandon
Lepaskan: 2024-11-12 09:32:01
asal
574 orang telah melayarinya

Why Does `json.Unmarshal` Throw an `InvalidUnmarshalError` When Using an Uninitialized Pointer?

JSON Unmarshal: Pointer vs. Reference

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!

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