调用log.Fatalln时是否调用了延迟函数?

时间:2013-07-26 18:35:02

标签: 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()是否仍在调用?

1 个答案:

答案 0 :(得分:11)

不,延迟函数不会运行。

以下是log.Fatal的说明:

  

致命等同于Print(),然后调用os.Exit(1)。

log.Fatal来电os.Exit,其描述为here

  

退出导致当前程序以给定的状态代码退出。   通常,代码零表示成功,非零表示错误。该   程序立即终止;延期函数不会运行。

Demonstration

如果您确实需要在程序完成之前正确关闭资源或执行某些任务,请不要使用log.Fatal