Наличие звёздочки (*) у ресивера в Go означает, что метод вызывается на указателе на экземпляр типа, а не на самой значение типа.
Основные следствия этого:
- Изменение состояния: Метод с ресивером-указателем может изменять поля структуры (или другого типа), на которую указывает ресивер. Без звёздочки метод работает с копией значения, и изменения внутри метода не отражаются на оригинале.
- Производительность: Передача указателя может быть более эффективной, чем передача большой структуры по значению, так как передается только адрес памяти, а не вся структура.
- Nil-значения: Методы с ресивером-указателем могут быть вызываться на
nil указателях, что может быть полезно для graceful обработки таких случаев.
Пример:
go