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!