Перехват на границе «Полки» обрабатывает только свои паники, чужую — бросает дальше. Реализуйте guard: поймайте панику, и если это не myPanic — сделайте panic(r) (re-panic), иначе отметьте handled = true.
- Задача
- Решение
- Обсуждение
Guard: re-panic чужой паники
GolangРешение
func guard(f func()) (handled bool) {
defer func() {
if r := recover(); r != nil {
if _, ok := r.(myPanic); !ok {
panic(r)
}
handled = true
}
}()
f()
return false
}