Dependency Injection в Go. Конструктор и интерфейсы.

Ответ

Зависимости передаются извне (через конструктор или опции), не создаются внутри типа. В Go: NewService(repo UserRepository, logger Logger) *Service; repo и logger - интерфейсы. Тестирование - подмена моками. Без DI-контейнера вручную собирают граф в main или init. Вариант - functional options: NewService(opts ...Option), WithRepo(r), WithLogger(l).

func NewService(repo UserRepository, log Logger) *Service {
    return &Service{repo: repo, log: log}
}
// test
svc := NewService(mockRepo, noopLogger)
🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.