Перейти к содержимому

Паника и восстановление в 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