Go WebSocket JSON Serialisasi/Deserialisasi: Mengendalikan Mesej Masuk Bercampur
In Go, menggunakan pakej websocket gorila untuk komunikasi WebSocket, mengendalikan mesej masuk jenis campuran boleh menimbulkan cabaran. Fungsi sambung perpustakaan.ReadJSON terhad kepada penyahserikatan ke dalam satu jenis struct tunggal.
Pernyataan Masalah
Pertimbangkan dua struct, Foo dan Bar, yang mewakili jenis mesej masuk:
type Foo struct { A string `json:"a"` B string `json:"b"` } type Bar struct { C string `json:"c"` D string `json:"d"` }
Keperluan adalah untuk memproses mesej masuk ini, mengenal pasti jenisnya (Foo atau Bar) dan dengan itu menyahsirikannya ke dalam struktur yang sesuai.
Penyelesaian
Untuk mengendalikan mesej masuk bercampur, pendekatan berikut boleh digunakan:
1. Gunakan Struktur Pembalut:
Buat struktur pembalut, Mesej, yang termasuk medan Kawalan untuk menentukan jenis mesej dan medan X untuk menyimpan data yang dinyahsiri.
type Messages struct { Control string `json:"control"` X json.RawMessage }
2. ReadJSON ke dalam Struktur Pembungkus:
Gunakan conn.ReadJSON untuk menyahsiri mesej masuk ke dalam struct Messages.
var m Messages err := c.ReadJSON(&m) if err != nil { // handle error }
3. Menghuraikan Jenis Mesej:
Berdasarkan nilai m.Control, tentukan jenis mesej sebenar (Foo atau Bar).
switch m.Control { case "Foo": // Convert the JSON to a Foo struct case "Bar": // Convert the JSON to a Bar struct }
Kod Contoh:
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 }
Dengan menggunakan json.RawMessage dalam struct Messages, data desiri boleh dikendalikan secara dinamik berdasarkan jenis mesej. Penyelesaian ini membolehkan pengendalian mesej masuk yang fleksibel dengan struktur yang berbeza.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Jenis Mesej JSON Campuran dalam Go WebSocket menggunakan Gorilla Websocket?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!