Go Websocket: json.RawMessage를 사용하여 여러 JSON 메시지 유형의 역직렬화
Gorilla websocket으로 작업할 때 여러 유형의 수신 JSON 메시지 처리 도전을 제시할 수 있습니다. 각 유형에 대해 ReadJSON 메서드를 개별적으로 사용하는 것은 번거로울 수 있습니다. 이 기사에서는 역직렬화를 효율적으로 처리하기 위해 json.RawMessage 유형을 활용하는 솔루션을 살펴봅니다.
문제:
수신되는 JSON 메시지를 기반으로 다른 구조체로 어떻게 역직렬화할 수 있습니까? 여러 ReadJSON을 사용하지 않고 JSON의 제어 필드 호출하십니까?
해결책:
실제 데이터 유형을 나타내는 Control 필드와 보관할 json.RawMessage 유형의 X 필드가 있는 래퍼 구조체 메시지를 정의하세요. 직렬화된 데이터.
type Messages struct { Control string `json:"control"` X json.RawMessage `json:"X"` }
수신 JSON 메시지를 메시지로 역마샬링합니다. struct.
var m Messages err := c.ReadJSON(&m)
Control 필드를 검사하여 데이터의 실제 유형을 확인합니다. X 필드를 적절한 구조체로 역마샬링합니다.
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 }
json.RawMessage를 사용하면 다양한 유형의 수신 메시지를 역직렬화하는 일반적인 접근 방식이 가능해 웹소켓 애플리케이션에서 여러 메시지 유형의 처리가 단순화됩니다.
위 내용은 json.RawMessage를 사용하여 Go Websocket에서 여러 JSON 메시지 유형을 효율적으로 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!