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:Untuk mengendalikan mesej masuk bercampur, pendekatan berikut boleh digunakan:
type Foo struct { A string `json:"a"` B string `json:"b"` } type Bar struct { C string `json:"c"` D string `json:"d"` }
Buat struktur pembalut, Mesej, yang termasuk medan Kawalan untuk menentukan jenis mesej dan medan X untuk menyimpan data yang dinyahsiri.
2. ReadJSON ke dalam Struktur Pembungkus:
Gunakan conn.ReadJSON untuk menyahsiri mesej masuk ke dalam struct Messages.type Messages struct { Control string `json:"control"` X json.RawMessage }
3. Menghuraikan Jenis Mesej:
Berdasarkan nilai m.Control, tentukan jenis mesej sebenar (Foo atau Bar).var m Messages err := c.ReadJSON(&m) if err != nil { // handle error }
Kod Contoh:
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 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!