Внедрение зависимостей (DI) — это паттерн проектирования, который обеспечивает слабую связанность, передавая зависимости компоненту вместо того, чтобы он создавал их сам. Этот подход особенно полезен в Go для улучшения тестируемости и поддерживаемости кода.
Основной способ реализации DI в Go включает два ключевых компонента:
Этот паттерн позволяет легко менять реализации, что критически важно для юнит-тестирования.
type HttpClient interface {
Do(req *http.Request) (*http.Response, error)
}
type Service struct {
client HttpClient
}
func NewService(client HttpClient) *Service {
return &Service{client: client}
}
func (s *Service) FetchData(url string) ([]byte, error) {
// Используем внедренный клиент
resp, err := s.client.Do(/* ... */)
// Обрабатываем ответ
return data, nil
}
HttpClient при тестировании без реальных HTTP-запросовServiceЭтот подход использует неявную реализацию интерфейсов в Go, делая DI естественным и идиоматичным для языка.
В Go интерфейсы должны быть явно объявлены как реализующие контракт зависимости, аналогично ключевому слову implements в Java, чтобы внедрение зависимостей работало корректно.
Новый — ещё не проверен сообществом
Вы