【解决方案】Golang布局体传0被忽略

打印 上一主题 下一主题

主题 1038|帖子 1038|积分 3114

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
【解决方案】Golang布局体传0被忽略

在 Go 语言中,当布局体字段标记为 omitempty 时,在将布局体序列化为 JSON 或其他格式时,如果字段的零值(好比数字类型的0、字符串类型的空字符串等)会被忽略,不会被序列化输出。这样可以减少序列化后的数据巨细,使其更加紧凑。
举例

以下是一个简单的示例,展示了布局体中利用 omitempty 标记的字段在序列化时会忽略零值:
  1. package main
  2. import (
  3.     "encoding/json"
  4.     "fmt"
  5. )
  6. type Person struct {
  7.     Name  string `json:"name"`
  8.     Age   int    `json:"age,omitempty"`
  9. }
  10. func main() {
  11.     p := Person{Name: "Alice", Age: 0}
  12.     // 序列化结构体为 JSON
  13.     data, err := json.Marshal(p)
  14.     if err != nil {
  15.         fmt.Println("Error:", err)
  16.         return
  17.     }
  18.     fmt.Println(string(data))
  19. }
复制代码
在上面的示例中,Age 字段被标记为 omitempty,以是即使其值为0,最终序列化为 JSON 时,Age 字段不会被包罗在输出中。
解决方案

如果想要在序列化时保留零值,可以将被忽略的字段设置为指针类型。以下是修改后的代码示例:
  1. package main
  2. import (
  3.     "encoding/json"
  4.     "fmt"
  5. )
  6. type Person struct {
  7.     Name string `json:"name"`
  8.     Age  *int   `json:"age,omitempty"`
  9. }
  10. func main() {
  11.     age := 0
  12.     p := Person{Name: "Alice", Age: &age}
  13.     // 序列化结构体为 JSON
  14.     data, err := json.Marshal(p)
  15.     if err != nil {
  16.         fmt.Println("Error:", err)
  17.         return
  18.     }
  19.     fmt.Println(string(data))
  20. }
复制代码
在这个修改后的代码中,Age字段的类型被更改为*int,这样就可以保留零值。当Age字段的值为零时,它不会被忽略,而是被序列化为0。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表