В чём разница между pointer receiver и value receiver при реализации интерфейса? Когда использовать каждый подход?

В Go указатель на объект типа Receiver обычно не нужен, если метод не изменяет состояние объекта или объект небольшой по размеру.

Короткий ответ

Что ответить на собеседовании

В Go указатель на объект типа Receiver обычно не нужен, если метод не изменяет состояние объекта или объект небольшой по размеру.

Подробный разбор

Ответ с пояснениями

В Go указатель на объект типа Receiver обычно не нужен, если метод не изменяет состояние объекта или объект небольшой по размеру.

Используйте указатель на Receiver, когда:

  • Нужно изменить состояние объекта внутри метода.
  • Объект большой, и вы хотите избежать копирования при вызове метода.

Если метод только читает данные и объект небольшой, можно использовать значение (не указатель).

Пример:

func (r *Receiver) UpdateValue(val int) {
    r.value = val // изменяем состояние, нужен указатель
}

func (r Receiver) PrintValue() {
    fmt.Println(r.value) // только чтение, можно без указателя
}

Таким образом, решение зависит от того, нужно ли изменять объект и насколько он большой.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее