Implement support for OmitZeroStructFields #61
Merged
+63
−1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
By default, Marshal serializes Go structs with all fields even if each field is the zero Go value.
This can lead to verbose output emitting fields for which it is often indistinguishable from the zero value of the field itself.
The caller-specified OmitZeroStructFields is equivalent to specifying the omitzero tag option on every Go struct field. Static analysis of Go code used with JSON indicates that about 50% of all struct fields have
omitempty
specified. Whileomitempty
is not the same asomitzero
, it is probably safer to provide a caller-scoped OmitZeroStructFields option since doing so is more likely to produce output that is semantically equivalent to if the option was not specified at all.The exceptions to the above is if the field value contains a -0.0 or if it implements IsZero that treats certain values other than the zero Go value as "zero".