在 Go 中,omitempty 标签只适用于空或零值的字段,当字段的值为 nil、0、空字符串或空数组等零值时才会省略该字段。而对于结构体类型,只有当该字段为 nil 时才会忽略,而不会因为结构体所有字段都为零值就忽略该字段。
在这种具体情况下,下面这个选择可以达到你的需求:
- 你可以改变你的结构体字段类型为 pointer to struct,这样使用
omitempty时,如果指针为nil,这个字段就会被省略。
修改后的代码可能如下:
type GiftContent struct {
LowGift *SingleGift `json:"low_gift,omitempty"`
MiddleGift *SingleGift `json:"middle_gift,omitempty"`
HighGift *SingleGift `json:"high_gift,omitempty"`
}