首页  >  文章  >  后端开发  >  为什么使用未初始化的指针时`json.Unmarshal`会抛出`InvalidUnmarshalError`?

为什么使用未初始化的指针时`json.Unmarshal`会抛出`InvalidUnmarshalError`?

Susan Sarandon
Susan Sarandon原创
2024-11-12 09:32:01509浏览

Why Does `json.Unmarshal` Throw an `InvalidUnmarshalError` When Using an Uninitialized Pointer?

JSON Unmarshal:指针与引用

最近,用户注意到在传递指针时使用 json.Unmarshal 出现意外行为。让我们研究一下为什么会存在差异。

在官方文档中,我们遇到了这样的说法:如果指针最初为 nil,Unmarshal 会自动分配一个新值来指向:

Unmarshal 将 JSON 解组为指针 指向的值。如果指针为 nil,Unmarshal 会为其分配一个新值来指向。

但是,当尝试将 Unmarshal 与未初始化的指针一起使用时,我们会遇到 InvalidUnmarshalError:

// InvalidUnmarshalError描述了传递给 Unmarshal 的无效参数。

// (Unmarshal 的参数必须是非零指针。)

此错误与文档的建议冲突自动内存分配。

要解决此差异,解决使用引用和指针之间的细微差别至关重要。在代码运行的第一个示例中,使用 &animals 创建了对变量的引用,确保它始终为非零。此引用行为与预期功能一致。

相比之下,第二个示例使用未初始化的指针 (*animals),这在 Unmarshal 眼中代表无效参数。它生成的错误准确地反映了这个问题。

最后一点,根据官方文档,该词的正确拼写是“unmarshaling”。

以上是为什么使用未初始化的指针时`json.Unmarshal`会抛出`InvalidUnmarshalError`?的详细内容。更多信息请关注PHP中文网其他相关文章!

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