Prima di tutto, ogni volta che hai una domanda "come viene utilizzato nella pratica", un buon modo per iniziare è cercare il codice sorgente Go (o qualsiasi base di codice Go abbastanza grande, in realtà) e la documentazione del pacchetto per le risposte.
Ora, os.Exit
e panic
sono abbastanza diversi. panic
viene utilizzato quando il programma, o una sua parte, ha raggiunto uno stato irreversibile.
Quando panic
viene chiamato, incluso implicitamente per errori di runtime come l'indicizzazione di una sezione fuori dai limiti o il fallimento di un'asserzione di tipo, interrompe immediatamente l'esecuzione della funzione corrente e inizia a srotolare lo stack della goroutine, eseguendo eventuali funzioni differite lungo il percorso. Se quello svolgimento raggiunge la cima dello stack della goroutine, il programma muore.
os.Exit
viene utilizzato quando è necessario interrompere immediatamente il programma , senza possibilità di ripristino o eseguire un'istruzione di pulizia differita, e restituisce anche un codice di errore (che altri programmi possono utilizzare per segnalare l'accaduto). Questo è utile nei test, quando sai già che dopo che questo test fallisce, anche l'altro fallirà, quindi potresti anche uscire ora. Può essere utilizzato anche quando il programma ha fatto tutto ciò che doveva fare e ora deve solo uscire, cioè dopo aver stampato un messaggio di aiuto.
Il più delle volte non lo utilizzerai panic
(dovresti restituire un error
invece), e non ne hai quasi mai bisogno os.Exit
al di fuori di alcuni casi nei test e per la terminazione rapida del programma.
panic
viene utilizzato per uscire in caso di errore, semplicemente perché è facile da capire, ed elimina l'importazione di altri pacchetti. Questo non significa che sia una pratica buona o idiomatica! . È solo un dispositivo salvaspazio per il codice di esempio. Riserva IRLpanic
per situazioni molto speciali.