> Как называются ресиверы в Go и когда использовать ресивер по значению или по указателю (Go)

Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы

Компании: Лига Цифровой Экономики

Стек: Go

> Пример ответа

В Go ресиверы (получатели) методов делятся на два типа: ресивер по значению (value receiver) и ресивер по указателю (pointer receiver). Они определяются в объявлении метода перед именем функции.

Ресивер по значению (например, func (u User) Print()) создаёт копию структуры при вызове метода. Используйте его, когда:

  • Метод не изменяет состояние структуры (только чтение).
  • Структура небольшая (например, несколько полей), чтобы копирование было дешёвым.
  • Вы хотите гарантировать, что оригинальные данные останутся неизменными.

Ресивер по указателю (например, func (u *User) Update()) передаёт указатель на структуру. Используйте его, когда:

  • Метод должен изменять поля структуры (мутация).
  • Структура большая (много полей или вложенных данных), чтобы избежать дорогого копирования.
  • Вы работаете с типами, которые не могут быть скопированы (например, sync.Mutex).

Общее правило: если сомневаетесь, используйте ресивер по указателю для последовательности и производительности, особенно в больших проектах. Однако для простых типов (как int, string) или методов-геттеров предпочтителен ресивер по значению.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью