🟡 Средний · 2 очк. Паттерны проектирования
Как в Go обычно делают Dependency Injection без тяжелых фреймворков?
A Интерфейсы описывают зависимости, конструктор принимает реализации интерфейсов
B Через глобальные переменные и init()
C Через рефлексию и теги структур
D Только через сторонние DI-контейнеры (wire, dig, fx)
Объяснение вопроса

В Go DI чаще делают вручную: зависимости описываются интерфейсами. Конструктор принимает интерфейсы (репозиторий, логгер, клиент API). Конкретные реализации создаются в main и передаются в конструкторы.

type OrderRepo interface {
    Save(ctx context.Context, o *Order) error
}
type OrderService struct { repo OrderRepo }
func NewOrderService(repo OrderRepo) *OrderService {
    return &OrderService{repo: repo}
}

В тесте передается NewOrderService(mockRepo). Фреймворки вроде wire или fx лишь автоматизируют сборку графа зависимостей.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.