Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah `json.Unmarshal` Gagal Apabila Menggunakan Penunjuk tetapi Berjaya dengan Rujukan?

Mengapakah `json.Unmarshal` Gagal Apabila Menggunakan Penunjuk tetapi Berjaya dengan Rujukan?

DDD
DDDasal
2024-11-19 20:05:03391semak imbas

Why Does `json.Unmarshal` Fail When Using a Pointer but Succeed with a Reference?

Unmarshaling JSON: Mendedahkan Perbezaan Antara Rujukan dan Penunjuk

Dalam bidang penghuraian JSON, json.Unmarshal ialah alat yang sangat diperlukan. Walau bagaimanapun, tingkah lakunya kadang-kadang boleh membingungkan. Khususnya, pengguna mungkin tertanya-tanya mengapa unmarshaling berfungsi dengan lancar apabila menggunakan rujukan tetapi gagal secara misteri apabila menggunakan penunjuk. Mari kita mendalami butir-butir isu ini.

Rujukan lwn. Penunjuk

Dalam contoh pertama, kami mentakrifkan "haiwan" sebagai pembolehubah jenis Haiwan. Apabila kami menghantar "&haiwan" kepada Unmarshal, kami menyediakan rujukan kepada pembolehubah ini. Ini membolehkan Unmarshal memanipulasi struktur asal secara langsung.

Sebaliknya, contoh kedua mengisytiharkan "haiwan" sebagai penunjuk kepada jenis Haiwan. Penunjuk memegang alamat pembolehubah lain, bukan pembolehubah itu sendiri. Melewati "haiwan" terus kepada Unmarshal bermakna kami memberikan penunjuk sifar kerana ia belum dimulakan.

Paradoks

Anehnya, dokumentasi untuk Unmarshal menyatakan bahawa ia boleh memperuntukkan nilai baharu untuk penuding sekiranya tiada. Jadi, kenapa contoh kedua gagal?

Menyingkap Ralat

Mesej ralat dalam contoh kedua sebenarnya InvalidUnmarshalError. Ralat ini dilemparkan apabila hujah yang dihantar kepada Unmarshal adalah penunjuk yang tidak sah. Walaupun kenyataan dokumentasi itu, Unmarshal memerlukan penuding bukan nol sebagai hujah.

Intinya

Untuk Unmarshal JSON dengan penuding dengan betul, anda mesti memulakannya pertama. Seperti yang ditunjukkan oleh dokumentasi, ini boleh dilakukan dengan hanya memberikan nilai yang sah kepada penuding sebelum memanggil Unmarshal.

Unmarshalling vs. Unmarshaling

Selain itu, anda mungkin perasan bahawa dokumentasi menggunakan kedua-dua "unmarshalling" dan "unmarshaling." Walaupun kedua-dua ejaan dianggap betul, "unmarshaling" ialah penggunaan yang lebih biasa dan lebih disukai dalam komuniti Go.

Atas ialah kandungan terperinci Mengapakah `json.Unmarshal` Gagal Apabila Menggunakan Penunjuk tetapi Berjaya dengan Rujukan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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