In Go, apabila menghadapi cabaran unmarshaling data JSON ke dalam antara muka{}, adalah penting untuk memahami cara untuk secara dinamik mengendalikan jenis data yang berbeza berdasarkan kekunci tertentu. Artikel ini menangani isu ini, menyediakan penyelesaian untuk unmarshal JSON ke dalam antara muka generik{} dalam Go.
Pertimbangkan senario di mana kita mempunyai jenis yang dipanggil Message dengan struct yang merangkumi medan Cmd (rentetan) dan medan Data (antara muka{}). Kami juga mempunyai CreateMessage jenis bersarang yang mentakrifkan struktur data tertentu. Apabila menyahmarshaling data JSON seperti '{"cmd":"create","data":{"conf":{"a":1},"info":{"b":2}}}', kita temui isu di mana medan Data tidak ditukar dengan betul kepada jenis CreateMessage yang sesuai.
Untuk menangani masalah ini, gunakan yang berikut pendekatan:
Berikut ialah contoh kod coretan yang menunjukkan penyelesaian:
type Message struct { Cmd string `json:"cmd"` Data json.RawMessage } type CreateMessage struct { Conf map[string]int `json:"conf"` Info map[string]int `json:"info"` } func main() { var m Message if err := json.Unmarshal(data, &m); err != nil { log.Fatal(err) } switch m.Cmd { case "create": var cm CreateMessage if err := json.Unmarshal([]byte(m.Data), &cm); err != nil { log.Fatal(err) } fmt.Println(m.Cmd, cm.Conf, cm.Info) default: log.Fatal("bad command") } }
Dengan memanfaatkan pendekatan ini, data JSON boleh dibongkar secara dinamik ke dalam struktur data yang sesuai, membolehkan pengendalian fleksibel data JSON varian dalam Go.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghapuskan Data JSON Secara Dinamik kepada Jenis Generik dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!