2013-07-26 14 views
5
db, err := sql.Open("postgres", "…") 
if err != nil { 
    log.Fatalln(err) 
} 
defer db.Close() 

tpl, err := template.ParseGlob("") 
if err != nil { 
    log.Fatalln(err) 
} 

Se template.ParseGlob("") restituisce un errore, viene ancora chiamato il numero db.Close()?Le chiamate differite vengono chiamate quando si chiama log.Fatalln?

+0

No. Se sono necessarie funzioni differite in esecuzione, utilizzare 'log.Panicln'. – user

risposta

9

No, le funzioni posticipate non vengono eseguite.

Ecco la descrizione di log.Fatal:

fatale è equivalente a print() seguita da una chiamata al os.Exit (1).

log.Fatal chiamate os.Exit, la cui descrizione è here:

uscita fa sì che il programma in corso per uscire con il codice di stato dato. Convenzionalmente, il codice zero indica il successo, un errore diverso da zero. Il programma termina immediatamente; le funzioni posticipate non vengono eseguite.

Demonstration

Se avete veramente bisogno di chiudere correttamente le risorse o fare alcuni compiti prima che il programma termina, allora non usare log.Fatal.

Problemi correlati