Go中结构体指针字段JSON序列化时,非nil指针输出值,nil指针输出null,配合omitempty可省略;反序列化时自动分配内存,null值使指针为nil,常用于区分零值与未设置,需注意判空防panic。

在Go语言中,结构体的指针字段在JSON序列化和反序列化时的行为与普通字段有所不同。理解这些规则对于正确处理API数据、配置解析以及跨服务通信非常重要。
当使用 encoding/json 包对包含指针字段的结构体进行编码(marshal)时:
omitempty 标签控制nil指针是否出现在输出中示例:
type User struct {
Name *string `json:"name"`
Age *int `json:"age,omitempty"`
}
name := "Alice"
age := 25
u := User{
Name: &name,
Age: nil,
}
data, _ := json.Marshal(u)
fmt.Println(string(data)) // 输出: {"name":"Alice"}
注意:Age字段因是nil且带有 omitempty,未出现在结果中。
立即学习“go语言免费学习笔记(深入)”;
在解码(unmarshal)JSON到结构体时,指针字段的处理逻辑如下:
null 时,对应指针字段会被设为nil示例:
jsonStr := `{"name":"Bob","age":null}`
var u User
json.Unmarshal([]byte(jsonStr), &u)
// 此时 u.Name != nil, *u.Name == "Bob"
// u.Age == nil
使用指针字段的主要目的包括:
omitempty 实现条件性输出需要注意的问题:
if u.Age == nil
以上就是Golang指针字段在JSON序列化中的行为如何_Golang json pointer编码解码规则的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号