Sobes.tech
Назад к вопросам
Senior
4

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

Компании, где спрашивали
Магнит Тех

Ответ от нейросети

sobes.tech AI

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

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

Пример:

// В месте использования
type Reader interface {
    Read(p []byte) (n int, err error)
}

func Process(r Reader) {
    // использует только метод Read
}

// В месте реализации
type File struct {}
func (f *File) Read(p []byte) (int, error) {
    // реализация
}

Таким образом, интерфейс определяется исходя из потребностей клиента, а не реализации.