> Почему интерфейсы лучше размещать в месте их применения? (Go)

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

Компании: Black Wall Group (BWG)

Стек: Go

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

Размещение интерфейсов в месте их применения (на стороне потребителя) - это ключевой принцип Go, который уменьшает связанность кода. Вместо того чтобы объявлять интерфейс рядом с конкретной реализацией (например, в пакете storage), мы определяем его там, где он используется (например, в service). Это позволяет потребителю описывать только те методы, которые ему нужны, а не весь контракт поставщика.

Например, если сервисному слою нужен только метод Save, мы пишем:

GO
package service
type Saver interface {
Save(ctx context.Context, data interface{}) error
}

Затем любая структура, реализующая Save, может быть передана в сервис. Это даёт гибкость: мы легко подменяем реализацию (например, на мок для тестов) без изменения кода сервиса. Пакет-реализация (скажем, postgres) не знает об этом интерфейсе - он просто экспортирует метод с нужной сигнатурой.

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

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

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