最近,用户注意到在传递指针时使用 json.Unmarshal 出现意外行为。让我们研究一下为什么会存在差异。
在官方文档中,我们遇到了这样的说法:如果指针最初为 nil,Unmarshal 会自动分配一个新值来指向:
Unmarshal 将 JSON 解组为指针 指向的值。如果指针为 nil,Unmarshal 会为其分配一个新值来指向。
但是,当尝试将 Unmarshal 与未初始化的指针一起使用时,我们会遇到 InvalidUnmarshalError:
// InvalidUnmarshalError描述了传递给 Unmarshal 的无效参数。
// (Unmarshal 的参数必须是非零指针。)
此错误与文档的建议冲突自动内存分配。
要解决此差异,解决使用引用和指针之间的细微差别至关重要。在代码运行的第一个示例中,使用 &animals 创建了对变量的引用,确保它始终为非零。此引用行为与预期功能一致。
相比之下,第二个示例使用未初始化的指针 (*animals),这在 Unmarshal 眼中代表无效参数。它生成的错误准确地反映了这个问题。
最后一点,根据官方文档,该词的正确拼写是“unmarshaling”。
以上是为什么使用未初始化的指针时`json.Unmarshal`会抛出`InvalidUnmarshalError`?的详细内容。更多信息请关注PHP中文网其他相关文章!