Memahami Gelagat JSON Unmarshal
Apabila cuba menyahmarshal data JSON menggunakan json.Unmarshal, adalah penting untuk memahami cara pakej berinteraksi dengan jenis pembolehubah .
Antara Muka Fallacy
Dengan mengandaikan bahawa json.Unmarshal secara automatik menggunakan struct konkrit yang dikaitkan dengan antara muka adalah salah tanggapan biasa. Pakej memerlukan panduan yang jelas tentang jenis unmarshaling yang diingini.
Contoh: Hilang dalam Terjemahan
Pertimbangkan contoh kod yang disediakan:
type Foo struct { Bar string `json:"bar"` } func getFoo() interface{} { return Foo{"bar"} }
The niat adalah untuk mendapatkan getFoo() mengembalikan struct Foo, tetapi kerana ia diberikan kepada antara muka, ia dirawat sebagai peta. Ini kerana apabila antara muka diserahkan kepada json.Unmarshal, pakej mentafsirkannya sebagai antara muka kosong dan menjana peta untuk objek JSON.
Penyelesaian: Pengisytiharan Jenis Eksplisit
Untuk menyelesaikan isu ini, hantar penuding secara eksplisit kepada jenis struct yang dikehendaki dalam antara muka:
func getFoo() interface{} { return &Foo{"bar"} }
Kini, apabila json.Unmarshal menerima antara muka, ia mengenal pasti penuding kepada struct dan menyahmarshal data JSON ke dalam medan struct dengan betul.
Key Takeaway :
Ingat bahawa json.Unmarshal bergantung pada maklumat jenis eksplisit yang diberikan untuk menentukan destinasi unmarshaling. Jika anda mahu ia menggunakan struct tertentu, anda mesti secara eksplisit menghantar nilai jenis itu atau penunjuk kepada jenis itu dalam antara muka.
Atas ialah kandungan terperinci Bagaimanakah `json.Unmarshal` Mengendalikan Antara Muka, dan Mengapa Pengisytiharan Jenis Eksplisit Penting?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!