"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > JSON WebSocket 메시지를 실질화하는 방법은 GO에서 Union 유형으로 메시지를 표시하는 방법은 무엇입니까?

JSON WebSocket 메시지를 실질화하는 방법은 GO에서 Union 유형으로 메시지를 표시하는 방법은 무엇입니까?

2025-03-12에 게시되었습니다
검색:488

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

메시지 유형 "foo"및 "bar"에 대한 structs가있는 다음 예를 고려하십시오. 문자열`json : "a"` b 문자열`json : "b"` } 유형 바 구조 { C 문자열`json : "c"` D String` json : "d"` }

Gorilla의 Conn.readjson 함수를 사용하면 들어오는 JSON 메시지를 특정 스트러크로 사로화 할 수 있습니다. 그러나 비효율적이고 번거로운 다른 유형의 메시지를 처리하기 위해 별도의 conn.readjson (foo) 및 conn.readjson (bar) 호출을 사용해야합니다. 제어 문자열`json : "컨트롤"` x JSON.RAWMESSAGE }

컨트롤 필드는 페이로드 유형을 나타내고 X는 원시 JSON 데이터를 보유합니다. 이 접근법을 사용하여 들어오는 메시지를 실조시키기 위해 :

var m 메시지 err : = c.readjson (& m) err! = nil {인 경우 // 오류를 처리합니다 } 스위치 M.Control { 사례 "foo": var foo foo err : = json.unmarshal ([] byte (m.x), & foo); err! = nil { // 오류를 처리합니다 } // foo와 함께 무언가를합니다 사례 "bar": // 처리 막대와 동일한 패턴을 따르십시오 }
type Foo struct {
    A string `json:"a"`
    B string `json:"b"`
}

type Bar struct {
    C string `json:"c"`
    D string `json:"d"`
}
이 솔루션을 사용하면 JSON.RAWMESSAGE의 rawMessage 인터페이스 유형을 사용하여 유형에 관계없이 들어오는 메시지를 사로화 할 수 있습니다. 스위치 명령문은 컨트롤 필드를 확인하여 실제 메시지 유형을 결정하고 그에 따라 사정화됩니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3