当前位置: 首页 > article >正文

【解决方案】Golang结构体传0被忽略

【解决方案】Golang结构体传0被忽略

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

举例

以下是一个简单的示例,展示了结构体中使用 omitempty 标记的字段在序列化时会忽略零值:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name  string `json:"name"`
    Age   int    `json:"age,omitempty"`
}

func main() {
    p := Person{Name: "Alice", Age: 0}

    // 序列化结构体为 JSON
    data, err := json.Marshal(p)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println(string(data))
}

在上面的示例中,Age 字段被标记为 omitempty,所以即使其值为0,最终序列化为 JSON 时,Age 字段不会被包含在输出中。

解决方案

如果想要在序列化时保留零值,可以将被忽略的字段设置为指针类型。以下是修改后的代码示例:

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  *int   `json:"age,omitempty"`
}

func main() {
    age := 0
    p := Person{Name: "Alice", Age: &age}

    // 序列化结构体为 JSON
    data, err := json.Marshal(p)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }

    fmt.Println(string(data))
}

在这个修改后的代码中,Age字段的类型被更改为*int,这样就可以保留零值。当Age字段的值为零时,它不会被忽略,而是被序列化为0。


http://www.kler.cn/a/500756.html

相关文章:

  • macOS 安装tomcat9
  • [人工智能自学] Python包学习-pandas
  • 【AI日记】25.01.11 Weights Biases | AI 笔记 notion
  • Qt 自定义控件(Qt绘图)
  • java_将数据存入elasticsearch进行高效搜索
  • Android实战经验篇-增加系统分区
  • AI开发 - 算法基础 递归 的概念和入门(三)递归的进阶学习
  • docker安装rabbit后访问报错最佳的几种解决方案
  • 《深入浅出HTTPS​​​​​​​​​​​​​​​​​》读书笔记(28):DSA数字签名
  • w156基于SpringBoot+Vue的常规应急物资管理系统的设计与实现
  • centos9设置静态ip
  • Elasticsearch介绍及使用
  • linux客户端工具mobaxterm
  • Node.js——http 模块(一)
  • 【机器学习:十六、其他的激活函数】
  • SpringBoot:SaToken的options预检请求鉴权失败
  • 1.微服务
  • 基于华为Maas(大模型即服务)和开源的Agent三方框架构建AI聊天助手实践
  • 大数据技术实训:Zookeeper集群配置
  • 最大拿牌的得分
  • IT运维如何实现工作流自动化?实用案例分享
  • SQL HAVING 子句深入解析
  • python functools.partialmethod 函数介绍
  • UML建模
  • 51单片机 AT24C02(I2C总线)
  • 极狐GitLab 正式发布安全版本17.7.1、17.6.3、17.5.5