使用log.Fatalln() 延遲函數執行
在Go 中,延遲函數會在周圍函數返回時執行,即使它退出由於恐慌或os.Exit()。但是,此規則也有例外。
log.Fatalln() 和延遲函數
當程式呼叫log.Fatalln() 函數時,它會列印錯誤訊息,然後立即退出程序,退出程式碼為1。重要的是,log.Fatalln() 呼叫os.Exit(),這會阻止剩餘的
延遲函數的含義
這意味著如果延遲函數在在呼叫log.Fatalln() 之後註冊,它將不會被執行。這是因為 os.Exit() 立即終止程序,而不給運行時運行延遲函數的機會。
示範
考慮以下程式碼:
db, err := sql.Open("postgres", "…") if err != nil { log.Fatalln(err) } defer db.Close() tpl, err := template.ParseGlob("") if err != nil { log.Fatalln(err) }
在這個範例中,如果由於開啟錯誤而執行了第一個log.Fatalln () 呼叫資料庫連接時,延遲函數db.Close() 將不會被調用,因為程式在log.Fatalln()調用後立即退出。
log.Fatalln() 的替代方法
如果需要在程序退出前正確釋放資源或執行其他任務,則不應使用 log.Fatalln()。相反,您可以使用 log.Println() 或將錯誤訊息列印到標準錯誤流,然後手動呼叫 os.Exit()。
以上是Go 中的延遲函數會在 `log.Fatalln()` 之後執行嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!