Bagaimana Mengendalikan Jenis Mesej JSON Campuran dalam Go WebSocket menggunakan Gorilla Websocket?

Mary-Kate Olsen
Lepaskan: 2024-11-14 19:40:03
asal
308 orang telah melayarinya

How to Handle Mixed JSON Message Types in Go WebSocket using Gorilla Websocket?

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"`
}
Salin selepas log masuk

1. Gunakan Struktur Pembalut:

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan