error-handling - script - try catch nodejs
Salir con código de error en ir? (4)
Como lo mencionó fas, tiene la func Exit(exitcode int)
del paquete os.
Sin embargo, si necesita que se aplique la función diferida, siempre puede usar la palabra clave defer
así:
http://play.golang.org/p/U-hAS88Ug4
Realiza todas sus operaciones, afecta a una variable de error y, al final, cuando todo está limpio, puede salir de forma segura.
De lo contrario, también podría usar panic / recover: http://play.golang.org/p/903e76GnQ-
Cuando se produce un error, entra en pánico y finaliza la limpieza donde lo captura (recupera).
¿Cuál es la forma idiomática de salir de un programa con algún código de error?
La documentación de Exit
dice "El programa termina inmediatamente; las funciones diferidas no se ejecutan", y log.Fatal
solo llama a Exit
. Para las cosas que no son errores atroces, terminar el programa sin ejecutar funciones diferidas parece extremo.
¿Se supone que debo pasar por algún estado que indique que ha habido un error y luego llamar a Exit(1)
en algún punto donde sé que puedo salir de forma segura, con todas las funciones diferidas ejecutadas?
En Python, comúnmente uso un patrón que se convierte para ir se ve así:
func run() int {
// here goes
// the code
return 1
}
func main() {
os.Exit(run())
}
Hago algo parecido a esto en la mayoría de mis paquetes main
reales, de modo que la convención de return err
se adopte lo antes posible y tenga una terminación adecuada:
func main() {
if err := run(); err != nil {
fmt.Fprintf(os.Stderr, "error: %v/n", err)
os.Exit(1)
}
}
func run() error {
err := something()
if err != nil {
return err
}
// etc
}
Sí, en realidad. El paquete os proporciona esto.
package main
import "os"
func main() {
os.Exit(1)
}
http://golang.org/pkg/os/#Exit
Edit: así que parece que sabes de Exit. Este artículo ofrece una descripción general de Panic que permitirá ejecutar las funciones diferidas antes de regresar. El uso de esto junto con una salida puede ser lo que está buscando. http://blog.golang.org/defer-panic-and-recover