Паника и восстановление в Go
Gary Clarke
0:00 / 0:00
Паника и восстановление в Go
158 просмотров · 5 месяцев назад
Gary Clarke
20 тыс. подписчиков
158 просмотров · 5 месяцев назад
В большинстве случаев Go использует явную обработку ошибок, но иногда программа достигает состояния, когда она не может безопасно продолжить выполнение. В этом уроке по Go вы узнаете, что делает panic, как panic перемещается вверх по стеку вызовов и как recover может остановить panic при использовании в отложенной функции.
Что вы узнаете:
Что такое panic и когда он останавливает нормальное выполнение
Как происходит распространение panic по стеку вызовов
Почему отложенные функции продолжают выполняться во время panic
Как работает recover и почему его необходимо вызывать внутри defer
Когда использовать errors вместо panic, особенно в серверном коде
Концептуальное объяснение:
panic прерывает нормальное выполнение и начинает разматывать стек. По мере разматывания стека выполняются отложенные функции. Если ничто не восстанавливает panic, программа завершает работу. recover возвращает значение panic и позволяет продолжить выполнение, но только если вызывается из отложенной функции в той же горутине. Именно поэтому defer плюс recover является стандартным шаблоном для перехвата неожиданных сбоев без сбоя всего процесса.
Как это работает:
Понимание panic и recover помогает создавать более безопасные параллельные сервисы и инструменты командной строки. Большинство участков кода должны возвращать ошибки, но знание поведения panic важно для отладки и защиты границ приложения. В HTTP-серверах recovery часто используется на уровне промежуточного ПО или обработчиков верхнего уровня, чтобы один некорректный запрос не остановил весь сервер.
Ключевые выводы:
panic останавливает нормальное выполнение и разматывает стек вызовов
Отложенные функции выполняются даже при возникновении panic
recover может остановить panic только внутри отложенной функции
Большинство кода приложения должно возвращать ошибки, а не panic
Используйте panic для неожиданных или неисправимых ситуаций
Перед проверкой решения попробуйте выполнить задание из видео.
Ссылки:
Папка с уроками на GitHub: https://github.com/GaryClarke/go-byte...
Создайте свое первое приложение на Go вместе со мной: https://www.garyclarke.tech/p/build-y...
Подпишитесь на рассылку, чтобы получать новые уроки и ресурсы: https://content.garyclarke.tech/go-by...
Подписывайтесь на нас в Twitter: / garyclarketech
Свяжитесь с нами в LinkedIn: / garyclarketech
Подпишитесь на канал, чтобы получать больше уроков по Go.
#golang #go #programming #coding #learnprogramming #gobytes