在 Go 语言的日常开发中,JSON 序列化是我们再熟悉不过的操作了。相信大家都用过 omitempty 标签来忽略空值字段,但你有没有遇到过这些尴尬场景:

  • time.Time 类型的零值 "0001-01-01T00:00:00Z" 明明想忽略,却总是被序列化出来
  • 空切片 []string{}nil 切片想要区别对待,却无能为力
  • 自定义类型想要定义自己的"零值"规则,却找不到入口

这些问题,在 Go 1.24 版本中终于得到了完美的解决方案——omitzero 标签横空出世!