🎃

[Go]構造体のフィールドタグに"omitempty"があってもなくてもjson.Unmarshalには関係ない

2022/10/14に公開

結論

omitemptyオプションが働くのはMarshalのときなので、Unmarshalの結果には影響しません。

調べてみた

実際のコードはこちらのplaygroundをご覧ください。

すべての要素がnullのjsonと、そもそも要素を全く持たないjsonとでUnmarshalを実行してみました。要素のパターンは以下のとおりです。

  1. 実体
  2. 実体 + omitempty
  3. ポインタ
  4. ポインタ + omitempty

omitemptyの有無に影響されることなく、実体であれば初期値である""になるし、ポインタであればnilになるという結果でした。

公式のドキュメントを再掲します。

omitemptyについて触れられているのはMarshalの説明のみで、Unmarshalの説明にはomitemptyについての記載がなく、考慮されていないことがわかりました。

別途、Marshalの挙動についても調べてみようと思います。

ではまた!

Discussion