> Почему интерфейсы лучше размещать в месте их применения? (Go)
Уровень: senior · Роль: backend · Язык: Go · Категория: Технические вопросы
Компании: Black Wall Group (BWG)
Стек: Go
> Пример ответа
Размещение интерфейсов в месте их применения (на стороне потребителя) - это ключевой принцип Go, который уменьшает связанность кода. Вместо того чтобы объявлять интерфейс рядом с конкретной реализацией (например, в пакете storage), мы определяем его там, где он используется (например, в service). Это позволяет потребителю описывать только те методы, которые ему нужны, а не весь контракт поставщика.
Например, если сервисному слою нужен только метод Save, мы пишем:
GOpackage servicetype Saver interface {Save(ctx context.Context, data interface{}) error}
Затем любая структура, реализующая Save, может быть передана в сервис. Это даёт гибкость: мы легко подменяем реализацию (например, на мок для тестов) без изменения кода сервиса. Пакет-реализация (скажем, postgres) не знает об этом интерфейсе - он просто экспортирует метод с нужной сигнатурой.
Такой подход следует принципу "принимайте интерфейсы, возвращайте структуры" и делает код модульным, тестируемым и независимым от конкретных библиотек.
> Похожие задачи по Go
Что делать, если нельзя писать логи внутри функции fetch, а можно только в функции main?
Как реализовать graceful shutdown в Go?
Куда нужно положить интерфейс, если робот реализует интерфейс?
Как читать данные из двух каналов одновременно без использования горутин
> Похожие задачи по backend
Что делать, если нельзя писать логи внутри функции fetch, а можно только в функции main?
Как реализовать graceful shutdown в Go?
Куда нужно положить интерфейс, если робот реализует интерфейс?
Как читать данные из двух каналов одновременно без использования горутин
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью