Back to questions
Middle+
1
Что такое паника в Go и когда её нельзя поймать?
Companies where asked
МВидео/эльдорадо
Answer from AI
sobes.tech AI
В Go паника (panic) — это механизм, который используется для обработки критических ошибок во время выполнения программы. Когда вызывается функция panic, выполнение текущей горутины прерывается, и начинается процесс "разворачивания" стека (stack unwinding), при котором вызываются отложенные функции (defer).
Панику можно поймать с помощью функции recover, которая должна вызываться внутри отложенной функции. Если recover вызывается вне отложенной функции, она не сможет поймать панику.
Однако есть ситуации, когда паника не может быть поймана:
- Если паника происходит в главной горутине и не поймана, программа завершится аварийно.
- Если паника происходит в системных вызовах или в runtime, которые не предоставляют возможность recover.
- Если recover вызывается не в контексте отложенной функции, она не сможет предотвратить завершение программы.
Пример:
func main() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Поймали панику:", r)
}
}()
panic("что-то пошло не так")
}
В этом примере паника будет поймана и обработана, программа не завершится аварийно.