Go Websocket: Penyahserialisasian Pelbagai Jenis Mesej JSON Menggunakan json.RawMessage
Apabila bekerja dengan soket web Gorilla, mengendalikan mesej JSON yang masuk daripada pelbagai jenis boleh memberikan cabaran. Menggunakan kaedah ReadJSON untuk setiap jenis secara berasingan boleh menyusahkan. Artikel ini meneroka penyelesaian yang menggunakan jenis json.RawMessage untuk mengendalikan penyahserikatan dengan cekap.
Masalah:
Bagaimanakah kita boleh menyahsiri mesej JSON yang masuk ke dalam struktur berbeza berdasarkan medan kawalan dalam JSON, tanpa menggunakan berbilang ReadJSON panggilan?
Penyelesaian:
Tentukan struktur pembalut Mesej dengan medan Kawalan untuk menunjukkan jenis data sebenar dan medan X jenis json.RawMessage untuk dipegang data bersiri.
type Messages struct { Control string `json:"control"` X json.RawMessage `json:"X"` }
Nyahkawal mesej JSON yang masuk ke dalam Messages struct.
var m Messages err := c.ReadJSON(&m)
Periksa medan Kawalan untuk menentukan jenis data sebenar. Nyahmarshal medan X ke dalam struct yang sesuai.
switch m.Control { case "Foo": var foo Foo if err := json.Unmarshal([]byte(m.X), &foo); err != nil { // handle error } // do something with foo case "Bar": ... follow pattern for Foo }
Menggunakan json.RawMessage membenarkan pendekatan generik untuk menyahsiri mesej masuk daripada jenis yang berbeza, memudahkan pengendalian berbilang jenis mesej dalam aplikasi soket web.
Atas ialah kandungan terperinci Bagaimana untuk Menyahseri Berbilang Jenis Mesej JSON dengan Cekap dalam Go Websocket Menggunakan json.RawMessage?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!