Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyahmarshal JSON ke dalam Struktur Konkrit dalam Go Apabila Menggunakan `antara muka{}`?

Bagaimana untuk Menyahmarshal JSON ke dalam Struktur Konkrit dalam Go Apabila Menggunakan `antara muka{}`?

Linda Hamilton
Lepaskan: 2024-11-28 17:06:17
asal
350 orang telah melayarinya

How to Unmarshal JSON into Concrete Structs in Go When Using `interface{}`?

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"}
}
Salin selepas log masuk

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!

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