Sobes.tech
Back to questions
Senior
6

Что такое паника (panic) в Go и чем она отличается от ошибки? Как отловить панику?

Companies where asked
2gis2gis

Answer from AI

sobes.tech AI

В Go panic — это механизм, который используется для обработки критических ошибок, после которых выполнение программы обычно прерывается. Паника вызывает немедленное прекращение текущего горутины и начинает процесс «раскрутки» стека (stack unwinding), вызывая отложенные функции (defer).

Отличия от ошибки:

  • Ошибка (error) — это обычное значение, которое возвращается функцией и может быть обработано обычным способом.
  • Паника (panic) — это экстренный сигнал о серьёзной проблеме, обычно не предназначенной для обычной обработки.

Чтобы отловить панику и предотвратить крах программы, используется функция recover(), которую можно вызвать внутри отложенной функции (defer). Если recover() вызывается во время раскрутки стека, она возвращает значение паники и останавливает её распространение.

Пример:

func safeCall() {
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Поймали панику:", r)
        }
    }()

    panic("что-то пошло не так")
}

func main() {
    safeCall()
    fmt.Println("Программа продолжает работу")
}