¿Por qué json.Unmarshal funciona con referencia pero no con puntero?

Este ejemplo de lajson.unmarshal documentos (ligeramente modificados para simplificar su usoAnimal en lugar de[]Animal) funciona, no hay errores:

Enlace de parque infantil de ejemplo de trabajo

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

Pero este ejemplo ligeramente modificado no lo hace:

Enlace de zona de juegos del ejemplo que no funciona.

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

Muestra este error oscuro que realmente no es útil (se parece más a una llamada de función que a un IMO de error):

json: Unmarshal (nil * main.Animal)

Esto parece ser porqueanimals Es un puntero no inicializado. Pero los documentos dicen (énfasis mío):

Unmarshal unmarshals el JSON en el valor apuntado por el puntero.Si el puntero es nulo, Unmarshal asigna un nuevo valor para que apunte.

Entonces, ¿por qué falla la detonación en el segundo ejemplo y muestra ese error oscuro?

(Además, ¿es "no desagradable" o "desalmado" (una L)? Los documentos usan ambos).