🎃
[Go]構造体のフィールドタグに"omitempty"があってもなくてもjson.Unmarshalには関係ない
結論
omitemptyオプションが働くのはMarshalのときなので、Unmarshalの結果には影響しません。
調べてみた
実際のコードはこちらのplaygroundをご覧ください。
すべての要素がnullのjsonと、そもそも要素を全く持たないjsonとでUnmarshalを実行してみました。要素のパターンは以下のとおりです。
- 実体
- 実体 + omitempty
- ポインタ
- ポインタ + omitempty
omitemptyの有無に影響されることなく、実体であれば初期値である""になるし、ポインタであればnilになるという結果でした。
公式のドキュメントを再掲します。
omitemptyについて触れられているのはMarshalの説明のみで、Unmarshalの説明にはomitemptyについての記載がなく、考慮されていないことがわかりました。
別途、Marshalの挙動についても調べてみようと思います。
ではまた!
Discussion