Pourquoi ne json.Unmarshal travailler avec référence mais pas de pointeur?

Cet exemple de la json.Unmarshal docs (légèrement modifié pour des raisons de simplicité d'utilisation Animal au lieu de []Animal) fonctionne, pas d'erreurs:

Aire de jeux lien de travail exemple

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

Mais c'légèrement modifiée, par exemple ne le fait pas:

Aire de jeux lien de non-travail exemple

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

Il affiche cet obscur erreur qui n'est pas vraiment utile (ressemble plus à un appel de fonction que d'une erreur de l'OMI):

json: Unmarshal(néant *principaux.Animal)

Cela semble être parce que animals est un pointeur non initialisé. Mais les docs disent (l'emphase est mienne):

Unmarshal unmarshals le JSON dans la valeur pointée par le pointeur. Si le pointeur est nul, Unmarshal attribue une nouvelle valeur pour le point de.

Alors pourquoi ne désordonnancement échouer dans le deuxième exemple et de montrer que les obscurs erreur?

(Aussi, est-il "unmarshalling" ou "désordonnancement" (un seul L)? Les docs d'utiliser les deux.)

InformationsquelleAutor Matt | 2013-12-09