这个示例来自json.Unmarshal文档(为了简单起见,稍作修改将[]Animal
改为了Animal
),可以正常运行,没有错误:
// ...
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)
// ...
但是这个稍作修改的例子就不行:
// ...
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)
// ...
它显示了这个晦涩的错误,真的没什么用(在我看来更像是一个函数调用而不是错误):
json: Unmarshal(nil *main.Animal)
这似乎是因为animals
是一个未初始化的指针。但文档说(强调我的部分):
Unmarshal将JSON解组为指向指针所指向的值。 如果指针为nil,则Unmarshal会为其分配一个新值。
那么为什么第二个例子中反序列化失败并显示了这个晦涩的错误呢?
(另外,“unmarshalling”或“unmarshaling”(一个L)哪个正确?文档都使用了。)