Tout d'abord, chaque fois que vous avez une question «comment il est utilisé en pratique», une bonne façon de commencer est de rechercher le code source de Go (ou toute autre base de code Go assez grande, vraiment), et la documentation du package pour obtenir des réponses.
Maintenant, os.Exit
et panic
sont assez différents. panic
est utilisé lorsque le programme, ou sa partie, a atteint un état irrécupérable.
Lorsqu'il panic
est appelé, y compris implicitement pour des erreurs d'exécution telles que l'indexation d'une tranche hors limites ou l'échec d'une assertion de type, il arrête immédiatement l'exécution de la fonction actuelle et commence à dérouler la pile de la goroutine, exécutant toutes les fonctions différées en cours de route. Si ce déroulement atteint le sommet de la pile de la goroutine, le programme meurt.
os.Exit
est utilisé lorsque vous devez abandonner le programme immédiatement, sans possibilité de récupération ou d'exécuter une instruction de nettoyage différé, et également renvoyer un code d'erreur (que d'autres programmes peuvent utiliser pour signaler ce qui s'est passé). Ceci est utile dans les tests, lorsque vous savez déjà qu'après l'échec de ce test, l'autre échouera également, vous pouvez donc aussi bien quitter maintenant. Cela peut également être utilisé lorsque votre programme a fait tout ce qu'il devait faire et qu'il n'a plus qu'à quitter, c'est-à-dire après avoir imprimé un message d'aide.
La plupart du temps, vous n'utiliserez pas panic
(vous devriez retourner un à la error
place), et vous n'en aurez presque jamais besoin en os.Exit
dehors de certains cas dans les tests et pour l'arrêt rapide du programme.
panic
est utilisé pour quitter en cas d'erreur, uniquement en raison du fait qu'il est facile à comprendre et élimine l'importation de tout autre package. Cela ne veut pas dire que c'est une bonne pratique ou une pratique idiomatique! . C'est juste un appareil peu encombrant par exemple de code. Réserve IRLpanic
pour des situations très particulières.