En primer lugar, siempre que tenga una pregunta sobre "cómo se usa en la práctica", una buena manera de comenzar es buscar el código fuente de Go (o cualquier base de código de Go suficientemente grande, en realidad) y los documentos del paquete para obtener respuestas.
Ahora, os.Exit
y panic
son bastante diferentes. panic
se utiliza cuando el programa, o su parte, ha alcanzado un estado irrecuperable.
Cuando panic
se llama, incluso implícitamente para errores de tiempo de ejecución como indexar un segmento fuera de los límites o fallar una afirmación de tipo, detiene inmediatamente la ejecución de la función actual y comienza a desenrollar la pila de goroutine, ejecutando cualquier función diferida en el camino. Si ese desenrollado alcanza la parte superior de la pila de goroutine, el programa muere.
os.Exit
se usa cuando necesita abortar el programa inmediatamente, sin posibilidad de recuperación o ejecutar una declaración de limpieza diferida, y también devuelve un código de error (que otros programas pueden usar para informar lo sucedido). Esto es útil en las pruebas, cuando ya sabe que después de que una de las pruebas falle, la otra también fallará, por lo que es mejor salir ahora. Esto también se puede usar cuando su programa ha hecho todo lo que tenía que hacer y ahora solo necesita salir, es decir, después de imprimir un mensaje de ayuda.
La mayoría de las veces no lo usará panic
(debe devolver un error
en su lugar), y casi nunca lo necesitará os.Exit
fuera de algunos casos en las pruebas y para la terminación rápida del programa.
panic
se usa para salir en caso de error, simplemente por el hecho de que es fácil de entender y elimina la importación de otros paquetes. ¡Esto no significa que sea una buena práctica o idiomática! . Es solo un dispositivo que ahorra espacio, por ejemplo, el código. Reserva IRLpanic
para situaciones muy especiales.