Стоит ли возвращать интерфейс вместо структуры? Когда это может быть плюсом?

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

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

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

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

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

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

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

Плюсы:

  • Позволяет менять внутреннюю реализацию без изменения интерфейса.
  • Упрощает тестирование через мок-объекты.
  • Способствует слабой связности и лучшей абстракции.

Пример:

// Интерфейс
 type Reader interface {
     Read(p []byte) (n int, err error)
 }

// Функция возвращает интерфейс, скрывая конкретную структуру
 func NewReader(data string) Reader {
     return &stringReader{data: data}
 }

// Клиент работает с Reader, не зная о stringReader

Однако, если нужна высокая производительность и нет необходимости в абстракции, можно возвращать конкретную структуру.

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

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

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

Подробнее