> 백엔드 개발 > Golang > Gorilla Websocket을 사용하여 Go WebSocket에서 혼합 JSON 메시지 유형을 처리하는 방법은 무엇입니까?

Gorilla Websocket을 사용하여 Go WebSocket에서 혼합 JSON 메시지 유형을 처리하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-14 19:40:03
원래의
405명이 탐색했습니다.

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

Go WebSocket JSON 직렬화/역직렬화: 혼합된 수신 메시지 처리

Go에서는 WebSocket 통신을 위해 gorilla websocket 패키지를 사용하여 수신 메시지 처리 유형이 혼합되어 있으면 문제가 발생할 수 있습니다. 라이브러리의 conn.ReadJSON 함수는 단일 구조체 유형으로 역직렬화하는 것으로 제한됩니다.

문제 설명

수신 메시지 유형을 나타내는 두 구조체 Foo 및 Bar를 고려하세요.

type Foo struct {
    A string `json:"a"`
    B string `json:"b"`
}

type Bar struct {
    C string `json:"c"`
    D string `json:"d"`
}
로그인 후 복사

요구 사항은 들어오는 메시지를 처리하고 유형(Foo 또는 Bar)을 식별한 후 적절한 구조체로 역직렬화하는 것입니다.

해결책

혼합 수신 메시지를 처리하려면 다음 접근 방식을 사용할 수 있습니다.

1. 래퍼 구조체 사용:

메시지 유형을 지정하는 Control 필드와 역직렬화된 데이터를 보관하는 X 필드를 포함하는 래퍼 구조체인 Messages를 생성합니다.

type Messages struct {
    Control string `json:"control"`
    X json.RawMessage
}
로그인 후 복사

2. 래퍼 구조체로 JSON 읽기:

conn.ReadJSON을 사용하여 들어오는 메시지를 메시지 구조체로 역직렬화합니다.

var m Messages
err := c.ReadJSON(&m)
if err != nil {
    // handle error
}
로그인 후 복사

3. 메시지 유형 구문 분석:

m.Control 값에 따라 실제 메시지 유형(Foo 또는 Bar)을 결정합니다.

switch m.Control {
case "Foo":
    // Convert the JSON to a Foo struct
case "Bar":
    // Convert the JSON to a Bar struct
}
로그인 후 복사

예제 코드:

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
}
로그인 후 복사

Messages 구조체에서 json.RawMessage를 사용하면 역직렬화된 데이터를 메시지 유형에 따라 동적으로 처리할 수 있습니다. 이 솔루션을 사용하면 다양한 구조의 수신 메시지를 유연하게 처리할 수 있습니다.

위 내용은 Gorilla Websocket을 사용하여 Go WebSocket에서 혼합 JSON 메시지 유형을 처리하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿