marshal – encode(serialization) in golang
marshal / unmarshal – encode / decode에 대한 go의 개념들
Marshal 이란?
구조체 또는 객체의 데이터를 json으로 byte[]로 만드는 것이 json.Marshal의 역할입니다. 여기까지는 그냥 string이며 http상에서는 문서로써 바로 전달이 가능하지요. http상에서는 모든게 문서이니깐요 🙂
(marshalling의 원래의미 – 군대에서 준비태세를 갖추는것을 말하는 것인데, 네트워크-전쟁으로 나아가기 전에 어떤 포멧- 무기로 싸울지 준비태세를 갖추는 것으로 이해하면 됩니다)
Serialization 이란?
하지만 일정한 크기로 잘게 나누어서 물 흐르듯이 계속 보내기 위해서는 stream 형태로 전달할 필요가 있습니다. node.js가 서버 사이드 언어이므로 최상위 객체 EventEmitter바로 밑에 stream 으로 흐르게 딱 박혀있습니다 (왜 갑자기 node.js 이야기를 하냐면 stream이 그만큼 서버 사이트 프로그래밍에 중요하다는 의미이고 node.js 도 stream 형태로 데이터를 전송하는 것이 기본 골격이라는 의미입니다)
golang에서는 Encode (Serialization) 라 불러주세요
golang에서는 serialization, 즉 byte[] 데이터를 stream화 하는 녀석의 이름이 encode라고 부르네요.

json.Marshal , Encode 의 개념도
golang 은 json 이외에도 다양한 encoding을 지원합니다.
- ascii85
- asn1
- base32/base64
- binary
- csv
- gob
- hex
- json
- pem
- xml
이 encoding formant을 보고나서, go가 물건이라는 것에 다시금 놀라게 되네요node.js의 encoding보다 기본적으로 제공하는 것이 많습니다. 이 말뜻은 기본적인 네트워크 프로그래밍 짜기에는 golang이 더 편하다는 이야이가 되겠네요.
json 직렬화일때 고민해야 하는 것들
json 직렬화에 대한 예제들과 고려사항에 대한 글들을 공유한다.
특히 두번째 포스트는 눈여겨 볼만하다. 중첩된 (nested) struct와 pointer의조합으로 재미난 trick 을 볼수있다. extra filed를 어떻게 json으로 전달할것인지에 대한 좋은 정보가 담겨져 있다.
[…] marshal – encode(serialization) in golang […]