2010-11-25 10 views
17

¿Cómo regreso desde main con un código de salida como lo haría en C? Contexto: Estoy comprobando que hay un solo argumento de línea de comando, imprimiré el uso y devolveré un código de estado de error si el recuento de argumentos o el argumento no son válidos.¿Cómo regreso de func main en Go?

Respuesta

23

Go utiliza la función Exit para eso. Simplemente pase el código de estado como argumento y listo :)

+4

que pueden funcionar en muchos casos, pero no todos: Cosas como enjuagar un logger/cerrar archivos no sucederán cuando solo os.Exit(). Defers no se ejecuta. – Julian

+1

Puede hacer algo como esto https://github.com/anacrolix/torrent/blob/master/cmd/torrentfs/main.go#L78 –

+0

Solo tenga cuidado de que os.Exit() no ejecute las funciones diferidas ([doc] (https://golang.org/pkg/os/#Exit)). – sepehr

5

La respuesta correcta está en el enlace de Matt Joiner. Esencialmente el siguiente fragmento. Uno tiene que asegurarse de que el resto del código hace no llamada os.Exit() en cualquier lugar, como flag.ExitOnError, log.Fatalf(), etc.

func main() { os.Exit(mainReturnWithCode()) } 

func mainReturnWithCode() int { 
    // do stuff, defer functions, etc. 
    return exitcode // a suitable exit code 
} 
+0

'return exitcode' produce un error de compilación. – sepehr

+0

La intención es devolver, p. 1, 2 o 0 en lugar de 'exitcode', que solo significa un marcador de posición. –