首页  >  文章  >  后端开发  >  为什么在 Go 中解组为未初始化的指针失败?

为什么在 Go 中解组为未初始化的指针失败?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-21 00:50:12874浏览

Why Does Unmarshaling into an Uninitialized Pointer Fail in Go?

解组为引用和指针

在将 JSON 数据反序列化为 Go 结构的过程中,json.Unmarshal 函数起着至关重要的作用。但是,用户在尝试解组为引用和指针时可能会遇到差异。

请考虑以下代码片段:

// Unmarshaling into a reference variable
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)

此代码成功将 JSON 数据解组为动物引用变量。

但是,当尝试解组为指针时会出现不同的结果变量:

// Unmarshaling into a pointer variable
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)

在这种情况下,Unmarshal 失败并出现一个模糊错误:“json: Unmarshal(nil *main.Animal)”。遇到此错误是因为 Animals 是一个未初始化的指针。

Unmarshal 的文档指出“如果指针为 nil,Unmarshal 会为其分配一个新值来指向。”但是,此行为似乎不适用于未初始化指针的情况,如错误消息所示。

要解决此问题,建议在尝试解组到指针变量 Animals 之前初始化它:

animals = &Animal{}
err := json.Unmarshal(jsonBlob, animals)

通过此修改,解组过程应该成功。

请注意,在文档中,术语“unmarshaling”被一致使用。

以上是为什么在 Go 中解组为未初始化的指针失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn