каким-либо образом перехватывать панику?
И ещё вопрос по dig.Container - кто-то реализовывал асинхронную загрузку в контейнер? Имею ввиду что можно ли как-то сделать так, чтобы перед вызовом invoke все provide точно отработали?
в gqlgen есть Recover middleware, который по дефолту логирует ошибку и возвращает в ответе, если нужное кастомное поведение перехвата - имплементь свою мидлварю ну из коробки асинхронного инита там нет, можно что-то такое накостылять var wg sync.WaitGroup // async init wg.Add(1) go func() { defer wg.Done() // do init }() wg.Wait() err := container.Invoke(func(/* dependecies */) { // … }) если ты об этом спрашивал конечно, но смысла от этого мало
Я кстати может не понимаю до конца, но почему мидлвары такие не идут встроено? Есть какие-то случаи когда нужно выкидывать панику и ложить все?
ну паника это вообще не норм в сервисе и непонятно как на нее реагировать, обычно все этот recover реализуют по-разному, хоть и где-то есть base-recover
Да. Лучше упасть зачастую, чем закорраптить данные. Все эти рековер делают зачастую хуже - замалчивают проблему и потом удивляешься, уже читая логи. А падение не сташно, оркестратор тебя перезапустит
Обсуждают сегодня