Когда использовать ОС.Выход () и паника ()?



может кто-нибудь объяснить ключевые различия между os.Exit() и panic() а как они используются на практике в Go?

548   2  

2 ответов:

прежде всего, всякий раз, когда у вас есть вопрос "как он используется на практике", хороший способ начать-это поиск исходный код Go (или любая достаточно большая база кода Go, действительно), и пакета документов для ответов.

теперь os.Exit и panic совершенно разные. panic используется, когда программа или ее часть достигла неустранимого состояния.

, когда panic называется, в том числе неявно для ошибки времени выполнения, такие как индексирование среза вне границ или сбой утверждения типа, он немедленно останавливает выполнение текущей функции и начинает разматывать стек goroutine, выполняя любые отложенные функции по пути. Если эта размотка достигает вершины стека goroutine, программа умирает.

os.Exit используется, когда вам нужно прервать программу сразу без возможности восстановления или выполнения отложенной инструкции по очистке, а также возвращает код ошибки (которые другие программы могут использовать, чтобы сообщить, что произошло). Это полезно в тестах, когда вы уже знаете, что после этого один тест терпит неудачу, другой также потерпит неудачу, поэтому вы можете просто выйти сейчас. Это также можно использовать, когда ваша программа сделала все, что ей нужно было сделать, и теперь просто нужно выйти, т. е. после печати сообщения справки.

большую часть времени вы не будете использовать panic (вы должны возвратить error вместо этого), и вы почти никогда не нужно os.Exit вне некоторых случаев в тестах и для быстрого завершения программы.

прежде всего,os.Exit() может использоваться для выхода из программы обычно без ошибок, и паники нет, так что это одно из ключевых различий. Другое дело, что паника где-то может быть поймана и проигнорирована или зарегистрирована с помощью recover.

но если мы говорим об ошибочном коде выхода, скажем:

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

использовать os.Exit(errorCode) или что-то вроде этого, если вы хотите:

  1. управление кодом выхода программы для целей написания сценариев.

  2. требуется упорядоченный выход на ожидаемую ошибку (например, ошибка ввода пользователем).

так что в основном паника для вас, плохой код выхода для вашего пользователя.

Comments

    Ничего не найдено.