Прежде всего, всякий раз, когда у вас возникает вопрос «как это используется на практике», хороший способ начать - поискать в исходном коде Go (или любой достаточно большой базе кода Go, на самом деле) и в документации пакета для ответов.
Теперь os.Exit
и panic
совсем другие. panic
используется, когда программа или ее часть достигли неустранимого состояния.
Когда panic
вызывается, в том числе неявно для ошибок времени выполнения, таких как индексирование фрагмента за пределами или сбой утверждения типа, он немедленно останавливает выполнение текущей функции и начинает раскручивание стека горутины, выполняя все отложенные функции по пути. Если эта раскрутка достигает вершины стека горутины, программа умирает.
os.Exit
используется, когда вам нужно немедленно прервать программу , без возможности восстановления или выполнения отложенного оператора очистки, а также вернуть код ошибки (который другие программы могут использовать для сообщения о том, что произошло). Это полезно в тестах, когда вы уже знаете, что после того, как один тест не прошел, другой тоже не сработает, поэтому вы можете просто выйти сейчас. Это также можно использовать, когда ваша программа сделала все, что нужно, и теперь нужно просто выйти, то есть после печати справочного сообщения.
В большинстве случаев вы не будете использовать panic
( error
вместо этого вы должны вернуть ), и вам почти никогда не понадобится os.Exit
за исключением некоторых случаев в тестах и для быстрого завершения программы.
panic
он используется для выхода при ошибке исключительно из-за того, что его легко понять, и исключает импорт любых других пакетов. Это не значит, что это хорошо или идиоматическая практика! . Это просто устройство для экономии места, например, код. IRL резервpanic
для очень особых ситуаций.