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라고 부르네요.

golang made

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으로 전달할것인지에 대한 좋은 정보가 담겨져 있다.

Join the conversation! 1 Comment

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.

카테고리

Backend, News, Software Architecture

태그

, , , , , , , ,