error) }, нет?
это кстати почти не имеет смысла (мокать сам клиент), тк мы можем легко добавить транспорт к http клиенту, который заменит в нем реальные запросы на все что угодно удовлетворяющее интерфейсу RoundTripper.
да каждый раз имело смысл
нет, это ты просто декларируешь что у тебя какой то параметр в функции имплементирует такой то интерфейс, а DI это куда сложнее. Я честно говоря даже не интересовался есть ли какие то реализации DI на го, в силу того что это компилируемый язык, и тут ты не обойдешь по нормальному циклическую зависимость, поэтому тут магия DI противопоказана от слова совсем, только правильная группировка сущностей
круто было бы аргументы еще описать
мб вы injection и inverstion путаете?
я намеренно упростил
для injection есть wire и для очень больших проектов он оправдан, но своеобразен
wire конечно есть, но его функционал один из самых куцых среди 5 топовых https://golangforall.com/ru/post/dependency-injection.html
остальные работают на рефлексии в рантайме, это как-то совсем стрёмно
нет, есть и код генерация
Это про dingo? ну там yaml 👀 wire использует гошный код
есть вариант sarulabs/di с генерацией
Кстати, заметил, что многие это путают, когда говорят о DI. Это говорит о том, что мало кто понимает, что это такое, и как оно может помочь на реальных проектах. Просто все пытаются слепо повторить то, что написали умные дядьки в своих книжках, не понимая смысла. Если какая-то концепция, нацеленная на широкую аудиторию, не понятна большому проценту разработчиков, то такая концепция не совсем удачна, и не стоит тратить на нее время. Например, исходя из этих соображений, мы пишем на Go, а не на C++ :)
Просто буковки одинаковые)
На плюсах все куда хуже с DI во всех его смыслах, имхо. Из-за полноценного ООП с наследованием и возможностью вырулить туда, где мост покажется классным паттерном)
а как вы делаете изоляцию external зависимостей в тестах ? К примеру, некий код, который подвязан к работе с S3. И вам нужно покрыть тестами функцию, которая делает что то с объектами с S3 ?
Конкретно с S3 внедрение зависимости изначально поддержано интерфейсами в либе - https://docs.aws.amazon.com/sdk-for-go/api/service/s3/s3iface/
окей, это для юнит тестов, когда ты тестируешь одну функцию, а если интеграционный тест, и тебе нужно покрыть external зависимости ?
не совсем понял. имхо, конфигурирование зависимостей - это одно и то же для всех тестов. либо какой-то мок, либо реальный сервис
Обсуждают сегодня