Почему нельзя вернуть так структуру?

В языке программирования Go типы данных, в том числе структуры (structs), передаются по значению. Это означает, что при передаче структуры в функцию или при возвращении из функции, создается копия этой структуры.

Если мы попытаемся вернуть структуру, то она будет скопирована, а затем возвращена из функции. Однако, это может быть неэффективно, особенно если структура очень большая или содержит большое количество данных. Такая копия может занимать много памяти и требовать дополнительного времени на копирование.

Вместо того, чтобы возвращать саму структуру, в Go обычно возвращается указатель на структуру. Указатель сохраняет адрес памяти, где находится структура, и при передаче указателя в функцию или при возвращении из функции используется именно этот адрес. Возврат указателя позволяет избежать копирования данных, так как передается только адрес, а не вся структура целиком.

При работе с указателями на структуры в Go следует быть осторожным и убедиться, что структура не будет изменена после возврата указателя. Если изменение структуры все же необходимо, то можно использовать указатели на указатели или указатели на интерфейсы, чтобы сохранить ссылку на структуру.

Таким образом, в Go не рекомендуется возвращать структуры напрямую, чтобы избежать лишних копирований и улучшить производительность. Вместо этого следует использовать указатели на структуры для передачи или возврата сложных данных.