2 ответов:
прежде всего, всякий раз, когда у вас есть вопрос "как он используется на практике", хороший способ начать-это поиск исходный код Go (или любая достаточно большая база кода Go, действительно), и пакета документов для ответов.
теперь
os.Exitиpanicсовершенно разные.panicиспользуется, когда программа или ее часть достигла неустранимого состояния., когда
panicназывается, в том числе неявно для ошибки времени выполнения, такие как индексирование среза вне границ или сбой утверждения типа, он немедленно останавливает выполнение текущей функции и начинает разматывать стек goroutine, выполняя любые отложенные функции по пути. Если эта размотка достигает вершины стека goroutine, программа умирает.
os.Exitиспользуется, когда вам нужно прервать программу сразу без возможности восстановления или выполнения отложенной инструкции по очистке, а также возвращает код ошибки (которые другие программы могут использовать, чтобы сообщить, что произошло). Это полезно в тестах, когда вы уже знаете, что после этого один тест терпит неудачу, другой также потерпит неудачу, поэтому вы можете просто выйти сейчас. Это также можно использовать, когда ваша программа сделала все, что ей нужно было сделать, и теперь просто нужно выйти, т. е. после печати сообщения справки.большую часть времени вы не будете использовать
panic(вы должны возвратитьerrorвместо этого), и вы почти никогда не нужноos.Exitвне некоторых случаев в тестах и для быстрого завершения программы.
прежде всего,
os.Exit()может использоваться для выхода из программы обычно без ошибок, и паники нет, так что это одно из ключевых различий. Другое дело, что паника где-то может быть поймана и проигнорирована или зарегистрирована с помощьюrecover.но если мы говорим об ошибочном коде выхода, скажем:
использовать
panicкогда что-то идет ужасно неправильно, вероятно, ошибка программиста, которая должна была быть поймана перед выходом на производство. Вот почему он печатает стек.использовать
os.Exit(errorCode)или что-то вроде этого, если вы хотите:
управление кодом выхода программы для целей написания сценариев.
требуется упорядоченный выход на ожидаемую ошибку (например, ошибка ввода пользователем).
так что в основном паника для вас, плохой код выхода для вашего пользователя.
Comments