если ошибка завершиться, да?
Нет, это кодогенерация DI
Ну вот в main я дёргаю config, потом redis, потом передаю данные в app, что оно мне наинжектит?
Ни за чем, DI это шаблон проектирования, придуманный для того, чтобы решить проблему отсутствия функций высшего порядка в плюсах и джаве с помощью наследования или имплементации интерфейсов. DI для го это простой карго-культ
Структуры для этого придумали. Параметры структур тоже можно прописать любые и не нужно следить за порядком
Я про порядок инициализации. Если сервис должен юзать db коннектор, то надо инициализировать сначала коннект к db, а только потом сам сервис и т.п.
DI контейнер вообще другие задачи решает, позволяя зависимости декларативно описывать и лениво инициализировать транзитивные зависимости
Внезапно у нас императивный язык. Порядок инициализации в коде можно задать просто порядком вызовов функций Это будет чистый и понятный код, а не завуалированная абстракция, созданная чтобы скрыть отсутствие содержания
Ленивая инициализация зависимостей это и есть функция высшего порядка, у нас тут не джава. Нужно инициализировать что-то потом -- верните анонимную функцию
Вот отличная мысль по поводу di
в ответ на мысль мысль выше)
некорректная мысль, di как шаблон проектирования повсеместно используется в го, когда вы в main функции руками прокидываете конкретные реализации интерфейсов при создании структур. Это один из способов реализации di, ручной. Есть также autowire di - это когда для того же самого используется какой-то ioc контейнер, повсеместно используется в c#/java и тд, но в го неидеоматично да.
Если смотреть обобщенно, соглашусь, но как правило под di понимают конкретные реализации
Обсуждают сегодня