标签: go exception-safety
db, err := sql.Open("postgres", "…") if err != nil { log.Fatalln(err) } defer db.Close() tpl, err := template.ParseGlob("") if err != nil { log.Fatalln(err) }
如果template.ParseGlob("")返回错误,db.Close()是否仍在调用?
template.ParseGlob("")
db.Close()
答案 0 :(得分:11)
不,延迟函数不会运行。
以下是log.Fatal的说明:
致命等同于Print(),然后调用os.Exit(1)。
log.Fatal来电os.Exit,其描述为here:
log.Fatal
os.Exit
退出导致当前程序以给定的状态代码退出。 通常,代码零表示成功,非零表示错误。该 程序立即终止;延期函数不会运行。
Demonstration
如果您确实需要在程序完成之前正确关闭资源或执行某些任务,请不要使用log.Fatal。