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

Mary-Kate Olsen
Lepaskan: 2024-11-14 19:40:03
asal
372 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:

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

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

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

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

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

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!

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