【问题标题】:Golang gob serializes array wronglyGolang gob 错误地序列化数组
【发布时间】:2022-01-18 04:24:10
【问题描述】:

我像这样传递给 gob 数组

[]int{}

但在接收端我得到这样的数组

[]int(nil)

这些数组有什么区别? gob为什么要这样序列化空数组?

【问题讨论】:

    标签: go gob


    【解决方案1】:

    为什么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

    【讨论】:

      【解决方案2】:

      []int{} - 空切片

      []int(nil) - 零切片

      Go Playground 示例:https://go.dev/play/p/RQGa76vNI5G

      您可以在本期中找到有关此 gob 行为的更多信息:https://github.com/golang/go/issues/10905

      【讨论】:

        猜你喜欢
        • 2019-05-29
        • 2019-04-14
        • 2017-11-26
        • 1970-01-01
        • 2019-04-27
        • 2013-08-08
        • 2016-01-15
        • 1970-01-01
        • 2015-03-17
        相关资源
        最近更新 更多