Sobes.tech
Назад к вопросам
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 позволяет её обработать и продолжить работу программы.