Назад к вопросам
2gis
Senior
5
Что такое паника (panic) в Go и чем она отличается от ошибки? Как отловить панику?
Компании, где спрашивали
Ответ от нейросети
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("Программа продолжает работу")
}