Por que o json.Unmarshal trabalha com referência, mas não ponteiro?

Este exemplo dojson.Unmarshal docs (ligeiramente modificados para simplificar o usoAnimal ao invés de[]Animal) funciona, sem erros:

Link Playground de exemplo de trabalho

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

Mas este exemplo ligeiramente modificado não:

Link Playground de exemplo não funcional

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

Ele exibe esse erro obscuro que realmente não é útil (parece mais com uma chamada de função do que com um erro IMO):

json: Unmarshal (nil * main.Animal)

Isso parece ser porqueanimals é um ponteiro não inicializado. Mas os docs dizem (ênfase minha):

Unmarshal unmarshals o JSON no valor apontado pelo ponteiro.Se o ponteiro for nulo, o Unmarshal aloca um novo valor para o qual ele aponta.

Então, por que o unmarshaling falha no segundo exemplo e mostra esse erro obscuro?

(Além disso, é "unmarshalling" ou "unmarshaling" (um L)? Os documentos usam ambos.)

questionAnswers(4)

yourAnswerToTheQuestion