Menyahmarshaling ke dalam Antara Muka{} dan Melaksanakan Penegasan Jenis
Apabila menerima mesej melalui sistem RabbitMQ dan melaksanakan penegasan jenis, adalah penting untuk memahami jenis yang tidak dikawal oleh json pakej.
Jenis Unmarshaling Lalai
Secara lalai, json.Unmarshal mengembalikan nilai yang berikut jenis:
Menyahmarshaling ke dalam Antara Muka{}
Apabila membongkar antara muka{}, nilai yang dikembalikan akan menjadi peta generik[rentetan]antara muka{}. Untuk menentukan jenis sebenar dalam peta, anda boleh sama ada:
Contoh Menggunakan Struktur Pembungkus
Untuk mengelakkan secara manual membongkar data, pertimbangkan untuk menggunakan struct pembalut seperti berikut:
type Unpacker struct { Data interface{} } func (u *Unpacker) UnmarshalJSON(b []byte) error { smth1 := &Something1{} err := json.Unmarshal(b, smth1) if err == nil & smth1.Thing != "" { u.Data = smth1 return nil } if _, ok := err.(*json.UnmarshalTypeError); err != nil & !ok { return err } smth2 := &Something2{} err = json.Unmarshal(b, smth2) if err != nil { return err } u.Data = smth2 return nil }
Struktur pembalut ini membolehkan anda menyahmarshal data ke dalam sama ada Something1 atau Something2, bergantung pada jenis data yang diterima.
Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Jenis Penegasan Selepas Menyahmarshalih JSON ke dalam `antara muka{}` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!