Горутины: паника и восстановление
Go не поддерживает создание и перехват исключений, вместо этого в программировании на Go предпочтительнее использовать явную обработку ошибок. На самом деле, Go поддерживает механизм, аналогичный броску/перехвату исключений. Механизм называется паника/восстановление.
Мы можем вызвать встроенную функцию panic для создания паники, чтобы текущая горутина перешла в состояние паники.
Паника — это еще один способ вернуть функцию. Как только в вызове функции возникает паника, вызов функции немедленно возвращается и переходит в фазу выхода.
Вызывая встроенную функцию recover в отложенном вызове, живую панику в текущей горутине можно удалить, чтобы текущая горутина снова перешла в нормальное спокойное состояние.
Если паникующая горутина завершится без восстановления, это приведет к сбою всей программы.
Встроенные функции и объявлены panic как recover.
Сейчас нам нужно понимать, что пустой тип интерфейса interface{} можно рассматривать как any тип или Object тип во многих других языках. Мы можем передать значение любого типа в panic вызов функции.
Значение, возвращаемое recover вызовом функции, является значением, panic потребляемым вызовом функции.
В приведенном ниже примере показано, как создать панику и как от нее избавиться.
Пришло время поработать с кодом!
Результат.
Вот еще один пример, который показывает, что горутина в панике завершает работу без восстановления. Так что вся программа вылетает.
Пришло время поработать с кодом!
Результат.
Среда выполнения Go создаст панику при некоторых обстоятельствах, например при делении целого числа на ноль. Например.
Пришло время поработать с кодом!
Результат.
Как правило, паники используются для логических ошибок, таких как ошибки человека по невнимательности. Логические ошибки никогда не должны возникать во время выполнения. Если они случаются, в коде должны быть ошибки. С другой стороны, нелогических ошибок трудно полностью избежать во время выполнения. Нелогические ошибки — это ошибки, происходящие в реальности. Такие ошибки не должны вызывать паники и должны быть явно возвращены и должным образом обработаны.
Некоторые фатальные ошибки не являются паникой и не восстанавливаются
Для стандартного компилятора Go некоторые фатальные ошибки, такие как переполнение стека, нехватка памяти, конкурентная запись в map, не подлежат восстановлению. Как только они произойдут, программа рухнет.
С оригиналом статьи ты можешь ознакомиться по ссылке.
Изучи дополнительные материалы для того, чтобы углубиться в тему: