Warum funktioniert json.Unmarshal mit Referenz, aber nicht mit Zeiger?

Dieses Beispiel aus demjson.Unmarshal docs (zur Vereinfachung leicht modifiziert)Animal anstatt[]Animal) funktioniert, keine Fehler:

Spielplatz link von arbeitsbeispiel

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

In diesem leicht modifizierten Beispiel ist dies jedoch nicht der Fall:

Spielplatz-Link des nicht funktionierenden Beispiels

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

Es zeigt diesen obskuren Fehler an, der wirklich nicht hilfreich ist (sieht eher aus wie ein Funktionsaufruf als ein Fehler, IMO):

json: Unmarshal (nil * main.Animal)

Das scheint daran zu liegenanimals ist ein nicht initialisierter Zeiger. Aber die Dokumente sagen (Hervorhebung von mir):

Beim Unmarshal wird der JSON in den Wert umgewandelt, auf den der Zeiger zeigt.Wenn der Zeiger null ist, weist Unmarshal einen neuen Wert zu, auf den er zeigen soll.

Warum schlägt das Aufheben des Marshalls im zweiten Beispiel fehl und zeigt diesen obskuren Fehler?

(Ist es auch "Unmarshalling" oder "Unmarshalling" (ein L)? In den Dokumenten werden beide verwendet.)