Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengendalikan Mesej JSON WebSocket Masuk dengan Struktur Berbeza di Golang?

Bagaimana untuk Mengendalikan Mesej JSON WebSocket Masuk dengan Struktur Berbeza di Golang?

Susan Sarandon
Susan Sarandonasal
2024-11-16 17:17:031116semak imbas

How to Handle Incoming WebSocket JSON Messages with Different Structures in Golang?

Mengendalikan Mesej JSON WebSocket Masuk dengan Golang

Siri dan penyahsirilan data JSON adalah penting dalam komunikasi WebSocket. Dalam Go, perpustakaan soket web gorila menyediakan cara yang mudah untuk menghantar dan menerima mesej JSON. Walau bagaimanapun, apabila berurusan dengan berbilang struct, menentukan jenisnya boleh menjadi satu cabaran.

Untuk mengendalikan senario ini, pertimbangkan untuk menggunakan struktur mesej generik seperti di bawah:

type Messages struct {
  Control string `json:"control"`
  X json.RawMessage
}

Dalam struktur ini, Control menentukan jenis mesej masuk, manakala X ialah medan yang tidak ditaip yang boleh menyimpan data sebenar.

Untuk mengendalikan masuk mesej, ikut langkah berikut:

  1. Baca mesej ke dalam struct Mesej:

    var m Messages
    err := c.ReadJSON(&m)
    if err != nil {
        // handle error
    }
  2. Berdasarkan nilai Kawalan, tentukan jenis data:

    switch m.Control {
    case "Foo":
        var foo Foo
        if err := json.Unmarshal([]byte(m.X), &foo); err != nil {
            // handle error
        }
        // do something with foo
    }
    ...
    // Handle other cases similarly

Dengan menggunakan json.RawMessage, anda mendapat fleksibiliti dalam mengendalikan pelbagai jenis data. Pendekatan ini membolehkan anda menyahsiri mesej masuk secara dinamik berdasarkan jenis yang ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Mesej JSON WebSocket Masuk dengan Struktur Berbeza di Golang?. 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