• Задача
  • Решение
  • Обсуждение

Guard: re-panic чужой паники

Перехват на границе «Полки» обрабатывает только свои паники, чужую — бросает дальше. Реализуйте guard: поймайте панику, и если это не myPanic — сделайте panic(r) (re-panic), иначе отметьте handled = true.

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
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

00:00:00
Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки