解组为引用和指针
在将 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中文网其他相关文章!