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