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

ops/2025/1/14 22:06:38/

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

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

举例

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

package mainimport ("encoding/json""fmt"
)type Person struct {Name  string `json:"name"`Age   int    `json:"age,omitempty"`
}func main() {p := Person{Name: "Alice", Age: 0}// 序列化结构体为 JSONdata, err := json.Marshal(p)if err != nil {fmt.Println("Error:", err)return}fmt.Println(string(data))
}

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

解决方案

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

package mainimport ("encoding/json""fmt"
)type Person struct {Name string `json:"name"`Age  *int   `json:"age,omitempty"`
}func main() {age := 0p := Person{Name: "Alice", Age: &age}// 序列化结构体为 JSONdata, err := json.Marshal(p)if err != nil {fmt.Println("Error:", err)return}fmt.Println(string(data))
}

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


http://www.ppmy.cn/ops/150125.html

相关文章

【Uniapp-Vue3】插槽Slots及具名插槽实现组件高度定制化

插槽就像挖了一个坑,在使用插槽的时候可以根据自己的需要放白萝卜还是胡萝卜。 一、放置插槽 该组件为user-layout一般我们的页面布局的头部和底部都不会变,只会改变中间部分,所以我们给中间部分留一个slot插槽: 二、使用插槽 …

SQL Server查询计划操作符——查询计划相关操作符(3)

7.3. 查询计划相关操作符 19)Collapse:该操作符对更改处理进行优化。当执行一个更改时,其能被劈成(用Split操作符)一个删除和一个插入。其参数列包含一个确定一系列键值字段的GROUP BY:()子句。如果查询处理器遇到删除和插入相同键值的毗邻行,其将用一个更高效的更改操作…

1月11日

[WUSTCTF2020]CV Maker 可以看到有个注册页面,尝试注册一个用户登进去看看 进来后第一眼就看到文件上传,尝试上传,上传php后返回了 文件上传后端检测exif_imagetype()函数 他提示不是image,也就是需要我们构造一个文件头为图像类…

nginx反向代理和负载均衡的区别

1、反向代理,不需要服务器池,直接代理某台服务器 location / {proxy_pass http://192.168.18.201;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $remote_addr; }proxy_set_header Host $host; …

安全容器服务未启动什么原因?

安全容器服务未启动什么原因?安全容器服务未启动可能由多种原因引起,主要包括代码或配置错误、资源限制、网络问题、存储问题、镜像问题以及权限和安全设置等。以下是UU云小编对安全容器服务未启动的几个常见原因及其解析: 首先,代…

数据结构-查找

查找表的基本概念 查找:在数据集合中寻找满足某种条件的数据元素的过程叫查找。 查找表(查找结构):用于查找的数据集合称为查找表,由同一类型的数据元素组成。 静态查找表:若查找表只涉及搜索和插入操作&…

中间件 | RocketMq - [broker 配置]

INDEX broker.conf broker.conf 干货见注释 ### 集群名 brokerClusterNameDefaultCluster### nameserver # nameserver 地址 namesrvAddr192.168.3.76:9876### broker # broker名,同名则主从 brokerNamea-m # broker id,唯一 brokerId0 # borker 端口 …

Python----Python基础(字符串,列表,元组,字典,集合的总结)

一、字符串 str,基本用法:拼接,复制,长度,索引,切片,查找,替换,大小写转化,去除空格,填充,分割,判断,可变字符…