Quand utiliser os.Exit () et panic ()?

Quelqu’un pourrait-il expliquer les principales différences entre os.Exit() et panic() et comment ils sont utilisés dans la pratique dans Go?

Tout d’abord, chaque fois que vous avez une question “comment cela est utilisé dans la pratique”, une bonne façon de commencer est de rechercher le code source de Go (ou toute base de code Go suffisante) et les docs de package pour obtenir des réponses.

Maintenant, os.Exit et panic sont très différents. panic est utilisé lorsque le programme, ou sa partie, a atteint un état irrécupérable.

Lorsque la panic est appelée, y compris implicitement pour les erreurs d’exécution telles que l’indexation d’une tranche hors limites ou l’échec d’une assertion de type, elle arrête immédiatement l’exécution de la fonction en cours et commence à dérouler la stack de la goroutine . Si ce déroulement atteint le sumt de la stack, le programme meurt.

os.Exit est utilisé lorsque vous devez abandonner le programme immédiatement, sans possibilité de récupération ou d’exécution d’une instruction de nettoyage différé, et renvoyer également 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, alors vous pouvez aussi bien quitter maintenant. Cela peut également être utilisé lorsque votre programme a fait tout ce qu’il devait faire, et qu’il suffit maintenant de le quitter, c’est-à-dire après avoir imprimé un message d’aide.

La plupart du temps, vous n’utiliserez pas la panic (vous devez renvoyer une error place) et vous n’avez presque jamais besoin d’ os.Exit dehors de certains cas pour les tests et pour la fin rapide du programme.

Tout d’abord, os.Exit() peut être utilisé pour quitter le programme normalement sans erreur, et pas de panique, c’est donc une distinction clé. Une autre est que la panique quelque part peut être attrapée et ignorée ou enregistrée en utilisant recover .

Mais si nous parlons d’un code de sortie erroné, disons:

Utilisez la panic quand quelque chose tourne mal, probablement une erreur du programmeur qui aurait dû être détectée avant de passer en production. C’est pourquoi il imprime la stack.

Utilisez os.Exit(errorCode) ou quelque chose comme ça si vous voulez:

  1. contrôler le code de sortie du programme à des fins de script.

  2. voulez une sortie ordonnée sur une erreur attendue (par exemple une erreur de saisie utilisateur).

Donc, fondamentalement, la panique est pour vous, un mauvais code de sortie est pour votre utilisateur.