Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpPnInr 52 of 280 menu
◀ ▶

Введение в аварийный останов в Go

Аварийный останов обрывает обычный ход программы, когда продолжать уже нельзя. Это не проверка через if err != nil и не возврат сбоя из функции: выполнение текущего участка кода прекращается сразу, а дальше язык разматывает стек вызовов, пока кто-то не перехватит останов или процесс не завершится.

Такой прием нужен, когда внутреннее состояние сломано настолько, что безопаснее остановить ветку целиком, чем тащить дальше неверные данные. В учебных примерах им часто показывают невозможную ситуацию; в реальных программах к нему прибегают реже, чем к обычным ошибкам, но знать правила перехвата все равно важно.

Вы уже работали с отложенным вызовом через defer и с возвратом ошибок из функций. Перехват останова опирается на defer: отложенная функция может снять панику и вернуть управление вызывающему коду. Без такого перехвата программа печатает трассировку и завершается, а строки после места останова не выполняются.

В этом разделе разберем, как вызвать останов с коротким сообщением, как перехватить его и продолжить работу со следующей строки вызывающего кода, почему перехват действует только внутри отложенной функции и что происходит, если останов никто не поймал. Сначала увидим мгновенное прерывание функции, затем научимся возвращать управление в main без падения всей программы.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить