-
Notifications
You must be signed in to change notification settings - Fork 18.4k
Description
Note: This proposal already has as a patch from 2015 by @bakineggs, but it appears to have fallen between the cracks.
I have the following case:
type Join struct {
ChannelId string `json:"channel_id"`
Accounts []Ident `json:"accounts,omitempty"`
History []TextEntry `json:"history,omitempty"`
}This struct is used for message passing and the slices are only relevant (and set to non-nil) in some cases. However, since encoding/json does not differentiate between a nil slice and an empty slice, there will be legitimate cases where a field is excluded when it's not expected to (e.g., the History slice is set, but empty).
I reiterate the proposal by Dan in his patch referred above to support an omitnil option which allows this differentiation for slices and maps.
Note for hypothetical Go 2.0: This is already how omitempty works for pointers to Go's basic types (e.g., (*int)(nil) is omitted while pointer to 0 is not). For Go 2.0 the behavior of omitempty could change to omit both nil and 0 when specified, and then only nil would be omitted when omitnil is specified.