Назад к вопросам
Middle
7
Как работает перехват паники (panic/recover) в Go?
Компании, где спрашивали
Япоки
Ответ от нейросети
sobes.tech AI
В Go механизм panic/recover используется для обработки исключительных ситуаций.
panicвызывает аварийное завершение текущей горутины, начинает процесс «паники», при котором стек вызовов сворачивается.- Во время сворачивания стека вызываются отложенные функции (
defer). - Если в одной из отложенных функций вызвать
recover(), то можно перехватить панику и предотвратить завершение программы.
recover() возвращает значение, переданное в panic(), если вызывается внутри отложенной функции во время паники. Если вызвать recover() вне отложенной функции или когда паники нет, он вернёт nil.
Пример:
func safeCall() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Паника перехвачена:", r)
}
}()
panic("что-то пошло не так")
}
Таким образом, panic инициирует ошибку, а recover позволяет её обработать и продолжить работу программы.