Паника в фоновой отправке письма роняет весь HTTP-сервис
func (h *Handler) CreateOrder(w http.ResponseWriter, r *http.Request) {
order := h.orders.Create(r.Context(), parse(r))
go h.mailer.SendConfirmation(order) // внутри иногда паника на nil
writeJSON(w, order)
}
Middleware с recover стоит на всём роутере. Паника в хендлере раньше приводила только к ответу 500, а паника в SendConfirmation завершает весь процесс. Почему?
- recover работает только в той же горутине, где паника
- Middleware с recover не применяется к хендлерам с go
- Паника в фоне всегда фатальна, в хендлере — нет
- SendConfirmation выполняется после завершения ответа
