저번에 패키지를 정리하면서 이 두개의 패키지에서의 차이점이 궁금하여 정리를 하게 되었습니다.
JSON문자열을 Go 밸류로 바꾸는 것을 디코딩 이라고 합니다.
json.Decoder가 이런 경우에 사용을 하게 됩니다.일단 json.NewDecoder함수로 디코더를 만들게 되고 이후 json.Decode를 통해 JSON문자열을 Go 밸류로 변경하게 됩니다.
이와 반대로 인코딩은 NewEncoding함수로 인코더를 만들고 이후 json.Encode를 통해서 인코딩 하게 됩니다.
이 패키지를 만드는 함수 json.NewDecoder에 들어가는 인자는 io.Writer 타입을 받게 됩니다.
둘은 모두 타입을 변환한다는 점에서 동일하지만 Marshal은 JSON으로 변환하는 것이 아니라 바이트 슬라이스로 변환을 합니다.
보통 Post요청을 통해 들어오면 ioutil.ReadAll(r.Body)를 통해서 바이트 슬라이스로 변경을 한뒤에 사용을 합니다.
data := ioutil.ReadAll(r.Body)`
json.Unmarshal([]byte(data), 변수(포인터값))