有没有办法将 struct 的空数组属性(非NULL)序列化并将其反序列化为空数组(再次为NOT NULL)?

考虑到空数组实际上是指向NULL的指针,那么在序列化/反序列化之后,空数组和指向NULL的指针之间明显的初始差异是否完全消失了呢?

最糟糕的实际情况是,当我第一次向睡觉客户端显示一个空数组属性时,作为json"att":[],并且在缓存注册到redis并恢复它之后,相同的属性显示给我的客户端为"att":NULL,导致协定被 destruct 并造成很多混乱.

Summing up: is possible to show the Customer 2 addresses like an json empty array, after serialize/deserialize => https://play.golang.org/p/TVwvTWDyHZ

推荐答案

我非常肯定你能做的最简单的方法就是改变你的路由

var cust1_recovered Cus至mer

cust1_recovered := Cus至mer{Addresses: []Address{}}

除非我读错了你的问题,否则我相信这是你想要的结果:

ORIGINAL  Cus至mer 2 {
  "Name": "Cus至mer number 2",
  "Addresses": []
}
RECOVERED Cus至mer 2 {
  "Name": "Cus至mer number 2",
  "Addresses": []
}

Here is a playground 至 verify with: https://play.golang.org/p/T9K1VSTAM0

正如@Mike指出的那样,这里的限制是,如果在编码之前Addresses真的是nil,那么一旦您解码了,就不会得到等价的json null,而是会得到一个空的列表.

Go相关问答推荐

Pulumi-S3-当策略依赖于访问点时,如何将AccesspintPolicy附加到访问点

如何防止程序B存档/删除围棋中程序A当前打开的文件?

Docker Compose Health Check未退出,错误为无法启动

Date.Format正在输出非常奇怪的日期

如何使用 AWS sdk 在 Go 中正确解组 PartiQL 查询的结果?

Go 是否提供了标准或事实上的方法来处理单个语句中的错误(即内联错误处理)?

运行 Docker 容器 - X11 无法打开显示:0

Go:如何在不加载正文的情况下创建 http 代理通行证

使用 goroutine 比较 Golang 中的两棵树是等价的

如何解决构建Docker Compose时的权限被拒绝问题

使用goqu无法获取响应

在 Windows 11 上运行 go mod tidy 时的 gitlab 权限问题

xml.Unmarshal 不支持的类型 struct

闭包所处的环境范围是什么?

我在 go 中制作的递归函数有什么问题?

Go:从 ssl 证书中获取 'subject/unstructeredName' 的值

获取切片元素的地址是否意味着 Go 中元素的副本?

Golang - 客户 Unmarshaler/Marshaler 在指针上具有 nil/null 值

如何在 Windows 中使用 github.com/AllenDang/giu 和 github.com/gordonklaus/portaudio 构建 GO 程序

(如何)我可以基于接口抽象地实现Stringer吗?