【发布时间】:2022-01-18 04:24:10
【问题描述】:
我像这样传递给 gob 数组
[]int{}
但在接收端我得到这样的数组
[]int(nil)
这些数组有什么区别? gob为什么要这样序列化空数组?
【问题讨论】:
我像这样传递给 gob 数组
[]int{}
但在接收端我得到这样的数组
[]int(nil)
这些数组有什么区别? gob为什么要这样序列化空数组?
【问题讨论】:
为什么gob会这样序列化空数组?
在文档中:https://pkg.go.dev/encoding/gob
当一个 slice 被解码时,如果现有 slice 有容量,则 slice 将就地扩展;如果没有,则分配一个新数组。
从 encoding/gob 的角度来看,[]int{} 和 []int(nil) 是 不可微分。
更多信息:https://github.com/golang/go/issues/10905
没有通用的解决方法,您的代码只需要以特定方式处理此问题,具体方式取决于您要完成的工作。 如果您的目标是进行深度复制,则有一些方法可以完全避免 gob。
而且似乎最好使用不同的解决方案
golang-nuts 可能是讨论这个问题的更好地方。 https://groups.google.com/forum/#!forum/golang-nuts
【讨论】:
[]int{} - 空切片
[]int(nil) - 零切片
Go Playground 示例:https://go.dev/play/p/RQGa76vNI5G
您可以在本期中找到有关此 gob 行为的更多信息:https://github.com/golang/go/issues/10905
【讨论】: