Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana Mengendalikan Jenis Mesej JSON Campuran dalam Go WebSocket menggunakan Gorilla Websocket?

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

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-11-14 19:40:03310semak imbas

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"`
}

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
}

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!

Kenyataan:
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