该
omitempty标签选项不能正常工作
time.Time,因为它是一个
struct。结构有一个“零”值,但这是所有字段都为零的结构值。这是一个“有效”值,因此不会被视为“空”。
但是只需将其更改为指针:
*time.Time,它将起作用(
nil对于JSON封送/拆组,指针被视为“空”)。因此,
Marshaler在这种情况下无需编写自定义:
type MyStruct struct { Timestamp *time.Time `json:",omitempty"` Date *time.Time `json:",omitempty"` Field string `json:",omitempty"`}使用它:
ts := time.Date(2015, 9, 18, 0, 0, 0, 0, time.UTC)ms := MyStruct{ Timestamp: &ts, Field: "",}输出(根据需要):
{"Timestamp":"2015-09-18T00:00:00Z"}在Go Playground上尝试一下。
如果您不能或不想将其更改为指针,则仍可以通过实现custom
Marshaler和来实现所需的功能
Unmarshaler。如果这样做,则可以使用该
Time.IsZero()方法来确定一个
time.Time值是否为零值。



