登录
首页 >  Golang >  Go问答

为什么 json.Unmarshal 使用引用而不使用指针?

来源:Golang技术栈

时间:2023-04-14 12:28:13 273浏览 收藏

本篇文章向大家介绍《为什么 json.Unmarshal 使用引用而不使用指针?》,主要包括golang,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

来自json.Unmarshal文档的这个例子(为了简单起见,稍作修改Animal而不是[]Animal)有效,没有错误:

工作示例的游乐场链接

// ...
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)
// ...

但是这个稍作修改的例子没有:

非工作示例的游乐场链接

// ...
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)
// ...

它显示了这个实际上没有帮助的晦涩错误(看起来更像是一个函数调用,而不是一个错误 IMO):

json: Unmarshal(nil *main.Animal)

这似乎是因为animals是一个未初始化的指针。但是文档说(强调我的):

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

那么为什么在第二个示例中解组失败并显示该模糊错误?

(此外,它是“解组”还是“解组”(一个 L)?文档同时使用。)

正确答案

您遇到了InvalidUnmarshalError(参见decode.go 中的第 109 和 110 行)。

// InvalidUnmarshalError 描述了传递给 Unmarshal 的无效参数。
// (Unmarshal 的参数必须是一个非零指针。)

似乎文档可以做一些澄清,因为上面的引用和来自Unmarshal来源的下面的评论似乎相互矛盾。

如果指针为 nil,Unmarshal 为其分配一个新值来指向。

到这里,我们也就讲完了《为什么 json.Unmarshal 使用引用而不使用指针?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于golang的知识点!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>