Разбираемся с `panic`
Часть раздела Логика и управление потоком путешествия по GO на Coddy. Урок 42 из 68.
В Go panic — это встроенная функция, предназначенная для действительно исключительных ситуаций, когда программа сталкивается с неисправимой ошибкой и должна немедленно остановиться. В отличие от обычных ошибок, которые вы обрабатываете корректно, panic используют только при катастрофических сбоях, указывающих на фундаментальную проблему в логике программы или её окружении.
Когда вызывается panic, обычное выполнение текущей функции немедленно останавливается, и начинается раскрутка стека вызовов. Это сильно отличается от типичного для Go подхода, при котором возвращаются ошибки, обрабатываемые вызывающим кодом.
В идиоматическом Go panic используется редко. Сообщество Go решительно предпочитает явную обработку ошибок с помощью возвращаемых значений, а не обработку ошибок с помощью паники. Вы можете встретить panic в таких ситуациях, как обращение к элементу массива за его границами, разыменование указателя nil или обнаружение библиотекой невозможного состояния, указывающего на ошибку в программе.
Большинство программ на Go должны корректно обрабатывать ошибки, используя стандартный интерфейс error, о котором ты уже узнал. Рассматривать panic следует только в том случае, если у программы действительно нет разумного способа продолжить выполнение.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутое управление потоком
Оператор switch с `fallthrough`Выход из вложенных цикловПереход к следующей итерации конкретного циклаОператор `goto`Повторение: расширенное управление циклами4Проект: простой список задач
Настройка проектаДобавление задачи7Обработка ошибок: углублённый разбор
Пользовательские типы ошибокОбёртывание ошибок с помощью `%w`Извлечение исходной ошибки с помощью `errors.Is`Извлечение исходной ошибки с помощью `errors.As`Разбираемся с `panic`Использование `recover`Итоги — безопасное деление2Структуры и методы
Определение методов для структурПолучатели-значенияПолучатели-указателиВыбор получателейМетоды и функцииПовторение: поведение структур5Карты: подробный разбор
Карты структурУказатели как значения картПроверка карт на nilСравнение картПовторение — счётчик частоты слов8Проект: простой складской учёт
Обзор проектаПроверка запасов3Интерфейсы (основы)
Что такое интерфейс?Определение интерфейсаРеализация интерфейсаИспользование типов интерфейсовПустой интерфейсУтверждения типовПереключатель типовПовторение — формы и поведениеПотренируйтесь самостоятельно: Онлайн-компилятор Go