Что такое Внедрение зависимости (Dependency injection)

«Что такое Внедрение зависимости (Dependency injection)» — вопрос из категории Архитектура, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Внедрение зависимости (DI) — это паттерн проектирования, при котором зависимости объекта передаются извне, а не создаются внутри. Это делает код более гибким, тестируемым и удобным для поддержки.

Пример без DI:

type Service struct {
    db *DB
}

func NewService() *Service {
    return &Service{db: NewDB()}
}

Пример с DI:

type Service struct {
    db DBInterface
}

func NewService(db DBInterface) *Service {
    return &Service{db: db}
}

Преимущества:

  • Упрощает тестирование (можно подменить зависимости моками)
  • Уменьшает связность компонентов
  • Делает код более гибким и переиспользуемым

В Go DI часто реализуется через интерфейсы и передачу зависимостей в конструктор.