Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Menyahserialisasikan Mesej Soket Web JSON sebagai Jenis Kesatuan dalam Go?

Bagaimana untuk Menyahserialisasikan Mesej Soket Web JSON sebagai Jenis Kesatuan dalam Go?

Linda Hamilton
Lepaskan: 2024-11-20 11:18:02
asal
589 orang telah melayarinya

How to Deserialize JSON Websocket Messages as Union Types in Go?

Menyahserialisasi Mesej Soket Web JSON sebagai Jenis Kesatuan dalam Go

Dalam Go, perpustakaan soket web gorila biasanya digunakan untuk mengendalikan sambungan soket web. Walau bagaimanapun, apabila menggunakan JSON untuk penyiaran dan penyahsirilan, pengendalian mesej masuk daripada pelbagai jenis memberikan cabaran.

Pertimbangkan contoh berikut di mana anda mempunyai struktur untuk jenis mesej "Foo" dan "Bar":

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

Fungsi conn.ReadJSON Gorilla membolehkan anda menyahsiri mesej JSON yang masuk ke dalam struktur tertentu. Walau bagaimanapun, anda perlu menggunakan panggilan conn.ReadJSON(Foo) dan conn.ReadJSON(Bar) yang berasingan untuk mengendalikan mesej pelbagai jenis, yang tidak cekap dan menyusahkan.

Untuk menangani perkara ini, anda boleh menggunakan perantara struct yang mengandungi medan kawalan dan medan untuk menyimpan data mesej sebenar:

type Messages struct {
    Control string `json:"control"`
    X json.RawMessage
}
Salin selepas log masuk

Medan Kawalan menunjukkan jenis muatan dan X memegang data JSON mentah. Untuk menyahsiri mesej masuk menggunakan pendekatan ini:

var m Messages
err := c.ReadJSON(&m)
if err != nil {
    // Handle error
}

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 the same pattern for handling Bar
}
Salin selepas log masuk

Penyelesaian ini membolehkan anda menyahsiri mesej masuk tanpa mengira jenisnya, menggunakan jenis antara muka RawMessage dalam json.RawMessage. Pernyataan suis menyemak medan kawalan untuk menentukan jenis mesej sebenar dan menyahsiri dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimana untuk Menyahserialisasikan Mesej Soket Web JSON sebagai Jenis Kesatuan dalam Go?. 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