В Go интерфейсы реализуются неявно (implicit implementation). Не нужно писать implements — если тип имеет все методы интерфейса, он его реализует автоматически.
type Writer interface {
Write([]byte) (int, error)
}
// os.File реализует Writer, хотя нигде это не объявляет
В Java/C# — явная реализация: class MyClass implements MyInterface. Это создаёт жёсткую связь.
Преимущества подхода Go:
- Можно определить интерфейс в пакете-потребителе, а не в пакете-провайдере
- Легко мокать для тестов
- Меньше связанность между пакетами
- Принцип: определяй интерфейсы маленькими, 1-2 метода