Почему json.Unmarshal работает со ссылкой, а не с указателем?
Этот пример изjson.Unmarshal документы (слегка модифицированные для простоты использованияAnimal
вместо[]Animal
) работает, ошибок нет:
Ссылка на игровую площадку рабочего примера
// ...
var animals Animal
err := json.Unmarshal(jsonBlob, &animals)
// ...
Но этот слегка измененный пример не делает:
Ссылка на игровую площадку нерабочего примера
// ...
var animals *Animal
err := json.Unmarshal(jsonBlob, animals)
// ...
Он отображает эту неясную ошибку, которая на самом деле бесполезна (больше похоже на вызов функции, чем на ошибку IMO):
json: Unmarshal (nil * main.Animal)
Это, кажется, потому чтоanimals
неинициализированный указатель Но документы говорят (выделение мое):
Unmarshal отменяет маршализацию JSON в значение, на которое указывает указатель.Если указатель равен нулю, Unmarshal выделяет новое значение, на которое он указывает.
Так почему же демаршалинг не удался во втором примере и показывает эту неясную ошибку?
(Кроме того, это «unmarshalling» или «unmarshaling» (один L)? Документы используют оба.)