Ответ
Паника (panic) в Go — это механизм для обработки исключительных ситуаций, который можно перехватить с помощью recover. Она останавливает выполнение текущей функции, запускает отложенные вызовы (defer) и поднимается вверх по стеку, пока не будет обработана или завершит программу.
Fatal Error (например, log.Fatal или os.Exit(1)) — это немедленное завершение программы без выполнения отложенных вызовов (defer не срабатывает) и без возможности восстановления.
Пример:
func main() {
defer fmt.Println("Это не выполнится при Fatal")
log.Fatal("Программа завершена") // defer не сработает
}
func handlePanic() {
defer func() {
if r := recover(); r != nil {
fmt.Println("Recovered:", r)
}
}()
panic("Что-то пошло не так") // defer сработает
}
Ключевые отличия:
panic+recover— для обработки ошибок в рантайме.Fatal— для критических ошибок, когда продолжение невозможно.deferработает только сpanic.