Menyahmarshal JSON ke dalam Struktur Konkrit
Apabila bekerja dengan struktur data yang kompleks, selalunya perlu untuk menyahmarshal JSON ke dalam struktur konkrit dan bukannya antara muka . Walau bagaimanapun, tingkah laku lalai json.Unmarshal adalah untuk menukar data JSON kepada peta apabila destinasi ialah antara muka.
Penjelasan Masalah
Dalam contoh yang disediakan, fungsi getFoo mengembalikan nilai antara muka{} yang membungkus struct Foo konkrit. Apabila json.Unmarshal dipanggil dengan nilai ini, ia mencipta peta dan bukannya menggunakan struct Foo yang mendasari kerana jenis antara muka{} sahaja tidak menyediakan maklumat yang mencukupi untuk unmarshaling.
Penyelesaian: Lulus Secara Eksplisit Rujukan Struktur
Untuk menyelesaikan isu ini, adalah perlu untuk menghantar penuding secara eksplisit kepada struct konkrit kepada json.Unmarshal. Ini memastikan penyahkod boleh mengenal pasti jenis struct yang betul:
func getFoo() interface{} { return &Foo{"bar"} }
Dengan mengembalikan penuding kepada struct, pembalut antara muka{} kini mengandungi rujukan kepada jenis konkrit, membenarkan json.Unmarshal menyahmarshal data dengan betul.
Nota:
Ia penting untuk ambil perhatian bahawa penyelesaian ini terpakai apabila jenis struct tertentu tidak diketahui pada masa penyusunan. Jika jenis struct diketahui, adalah lebih baik untuk menghantarnya terus ke json.Unmarshal untuk keselamatan dan prestasi jenis yang lebih baik.
Atas ialah kandungan terperinci Bagaimana untuk Menyahmarshal JSON ke dalam Struktur Konkrit dalam Go Apabila Menggunakan `antara muka{}`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!