Интерфейсы Go vs других языков?

Middle
968 просмотров
AFK Offer AI

В Go интерфейсы реализуются неявно (implicit implementation). Не нужно писать implements — если тип имеет все методы интерфейса, он его реализует автоматически.

type Writer interface {
    Write([]byte) (int, error)
}
// os.File реализует Writer, хотя нигде это не объявляет

В Java/C# — явная реализация: class MyClass implements MyInterface. Это создаёт жёсткую связь.

Преимущества подхода Go:

  • Можно определить интерфейс в пакете-потребителе, а не в пакете-провайдере
  • Легко мокать для тестов
  • Меньше связанность между пакетами
  • Принцип: определяй интерфейсы маленькими, 1-2 метода

Следующий вопрос

Что такое connection pool для БД?