try script nodejs new error ejemplo catch and error-handling go exit

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