問題:
考慮以下Go 程式碼:
db, err := sql.Open("postgres", "…") if err != nil { log.Fatalln(err) } defer db.Close() tpl, err := template.ParseGlob("") if err != nil { log.Fatalln(err) }
考慮以下Go 程式碼:
如果template.ParseGlob("")回傳錯誤,會呼叫 db.Close() 函數嗎?
答案:不,在這種情況下不會執行延遲函數。
說明:程式碼片段中,如果呼叫 template.ParseGlob("") 失敗並觸發 log.Fatalln(),程式將退出立即地。因此,延遲函數 db.Close() 將不會被執行,從而可能使資料庫連線保持開啟。
示範:package main import ( "log" "os" ) func main() { defer os.Exit(1) // Exit the program with status code 1 log.Fatalln("Program terminated early") }
執行此程式碼將導致記錄錯誤訊息並退出程式立即執行,而不執行任何延遲函數。
避免:為了避免不正確關閉資源或未處理任務的問題,請考慮使用log.Println() 進行錯誤日誌記錄並在不終止程序的情況下優雅地處理錯誤。以上是Go 中呼叫 `log.Fatalln()` 後會執行 `defer` 函數嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!