はじめに 今やあらゆるアプリケーションは Go で書かれていると言っても過言ではない(過言)。そして、今やあらゆるデータは json であると言っても過言ではない(過言)。 となると、Go で json を扱う頻度も必然的に多くなる。そして初めて Go で json をデコードするコードを書こうとした人は、必ずこの問題にぶち当たる。 「json.Unmarshal と json.Decoder は何が違うのか?そしてどちらを使えばいいのか?」 そしてググると大抵以下のような答えにたどり着く。 入力が文字列(string)やバイト列([]byte)の場合は json.Unmarshal() を使う 入力がストリーム(io.Reader)の場合は json.Decoder を使う なるほど、確かにパッと見はそれでいいように思える。思えるんだが、よく見ると実は他にもいくつか考慮すべき点がある。