omitempty
是 Go 语言中 JSON 序列化的一个特殊标签(tag),它的作用是:
当字段值为空值(zero value)时,JSON 序列化时会忽略该字段。具体来说:
这些情况下,如果标记了 omitempty
,序列化后的 JSON 将不会包含这些字段。
例子:
type Person struct {
Name string `json:"name,omitempty"`
Age int `json:"age,omitempty"`
Address *string `json:"address,omitempty"`
}
func main() {
p := Person{
Name: "John",
// Age 和 Address 都是零值
}
json, _ := json.Marshal(p)
fmt.Println(string(json))
// 输出: {"name":"John"}
// age 和 address 因为是零值且有 omitempty 标签,所以被省略了
}
omitempty
的主要用途:
在你给出的例子中:
ModelDetails map[string]*repo.ModelStats `json:"model_details,omitempty"`
如果 ModelDetails 为 nil 或者是一个空的 map,在 JSON 序列化时这个字段会被完全忽略。