recover в Golang
Как работает recover
В Go функция recover
используется для обработки паник (panic). Паника — это механизм, который останавливает нормальное выполнение программы и начинает её аварийное завершение. recover
позволяет «перехватить» панику и восстановить выполнение программы, чтобы она не завершилась аварийно.
Как работает recover
recover
работает только внутри отложенных функций (deferred functions).- Если паника произошла,
recover
возвращает значение, переданное вpanic
. - Если паники не было,
recover
возвращаетnil
.
Синтаксис
Пример использования recover
Как это работает
- В функции
main
вызываетсяpanic
, что приводит к аварийной остановке программы. - Перед этим выполняется отложенная функция (deferred function), в которой вызывается
recover
. recover
перехватывает панику и возвращает значение, переданное вpanic
.- Программа продолжает выполнение после паники, а не завершается аварийно.
Использование recover
для безопасного выполнения кода
recover
часто используется для обработки ошибок в критических участках кода, чтобы программа могла продолжить работу даже в случае сбоев.
Пример:
Вывод:
Использование recover
в горутинах
Если паника происходит внутри горутины, она не влияет на другие горутины. Однако, если паника не обработана, программа завершится аварийно. Чтобы этого избежать, используйте recover
внутри горутины.
Пример:
Когда использовать recover
- Критические участки кода: Например, при работе с внешними ресурсами (базами данных, файлами, сетевыми запросами), где возможны неожиданные ошибки.
- Горутины: Для предотвращения аварийного завершения программы из-за паники в горутинах.
- Тестирование: Для обработки паник в тестах.
Ограничения recover
recover
работает только внутри отложенных функций.- Если
recover
вызывается вне отложенной функции, он не перехватит панику. recover
не может перехватить панику, если она произошла в другой горутине (если толькоrecover
не находится в той же горутине).
Итог
recover
— это мощный инструмент для обработки паник в Go.- Используйте его в отложенных функциях для безопасного выполнения кода.
- Применяйте
recover
в горутинах, чтобы предотвратить аварийное завершение программы. - Не злоупотребляйте
recover
: паники должны использоваться только для действительно критических ошибок, а не для обычного управления потоком выполнения.
Recommended Posts
Golang map и Swiss Table
16.03.2025