Sobes.tech
Back to questions
Junior — Middle
84

В каких случаях предпочтительнее реализовать интерфейсы и где их лучше объявлять?

Answer from AI

sobes.tech AI

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

Когда реализовать интерфейсы:

  • Если функция или метод должен работать с разными типами, объединяя их общим поведением.
  • Для упрощения тестирования — можно подменять реальные реализации моками.
  • При проектировании модульного, расширяемого кода.

Где объявлять интерфейсы:

  • Обычно интерфейсы объявляют там, где они используются (например, в пакете, где функция принимает интерфейс), а не там, где реализуются.
  • Это облегчает расширение и уменьшает зависимость между пакетами.

Пример:

// В пакете storage
type Reader interface {
    Read(p []byte) (n int, err error)
}

// В другом пакете можно реализовать этот интерфейс
func (f *File) Read(p []byte) (int, error) {
    // реализация
}

Такой подход позволяет писать гибкий и тестируемый код.