[Go] 다형적인 값에 대한 JSON 역직렬화
Go에서는 아래와 같이 구조체와 구조체 태그를 이용해서 직렬화/역직렬화를 수행한다.
근데 Go는 경직된 언어 특성 탓에 조금.. 한계를 맞이할 때가 있다.
예를 들면, 이런 경우다.
특정 필드가 어떨때는 배열로 날라오고 어떨때는 객체로 날라온다거나 하는 그런 경우 말이다.
이런 경우가 있을까 싶을 수도 있지만, 있다. 생각보다 적지가 않다.
혹은 특정 type 필드에 따라서 다른 필드값이 죄다 바뀌는 형태로 설계가 되어있는 것들도 있다.
일단 돌려보기나 해보자.

그러면 당연히 에러가 터진다.
Golang은 이에 대한 세련된 해결책을 제공할까? 사실 없다.
이런걸 제대로 처리하려면 Rust, Typescript처럼 Union 타입이 있어야 하는데, Go는 그런게 아예 없기 때문이다.
직렬화 무시
이 오류를 제거하는 가장 간단한 방법은, 그냥 무시하도록 하는 것이다.
json.RawMessage 타입을 붙이면 json 디코더는 해당 필드를 굳이 역직렬화하려고 시도하지 않고, byte 슬라이스 그대로 남겨둔다.


그러면 이걸 받아서 수동으로 직접 처리하거나 하면 된다...
Any 박기
혹은 타입에 그냥 Any를 박는 것도 방법이다.
그럼 대충 넣어주긴 한다. 타이핑이 안돼서 그렇지

이것도 마찬가지로 꺼내쓰려면 뻘짓을 해야한다.

돌기는 잘 돈다.

참조
https://stackoverflow.com/questions/55994888/unmarshal-json-tagged-union-in-go
https://stackoverflow.com/questions/42721732/is-there-a-way-to-have-json-unmarshal-select-struct-type-based-on-type-prope