Где лучше объявлять интерфейс — в месте реализации или в месте потребления?

В Go интерфейсы обычно располагают по месту использования, а не по месту объявления. Это связано с философией Go — интерфейсы описывают поведение, которое требуется клиенту, а не то, что реализует конкретный тип.

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

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

В Go интерфейсы обычно располагают по месту использования, а не по месту объявления. Это связано с философией Go — интерфейсы описывают поведение, которое требуется клиенту, а не то, что реализует конкретный тип.

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

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

В Go интерфейсы обычно располагают по месту использования, а не по месту объявления. Это связано с философией Go — интерфейсы описывают поведение, которое требуется клиенту, а не то, что реализует конкретный тип.

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

Пример:

// В пакете storage
// Интерфейс определён там, где он используется
func ProcessData(s DataStore) {
    s.Save()
}

// В другом пакете
type FileStore struct {}
func (f FileStore) Save() { /* реализация */ }

// FileStore автоматически реализует интерфейс DataStore

Таким образом, интерфейсы в Go — это контракты, которые определяются потребителем, а не поставщиком.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку