Go-defer
阿新 • • 發佈:2020-12-25
defer
在函式執行完後釋放資源。
func main() { fmt.Println("add執行完返回了", add(5, 9)) } //1.當執行到defer時,暫時不執行,會將defer後的語句壓入單獨的棧(defer棧) //2.當函式執行完畢後,再從defer棧中,先入後出取出執行 //3.defer將語句壓入棧時也把變數值放入棧,後續變動不影響他 func add(a int, b int) int { fmt.Println("add開始執行了") defer fmt.Println("我是defer", a) a++ a = a + b fmt.Println("add執行完了") return a }
最佳實踐(在開啟檔案,資料庫連線,鎖資源之後加上就不用關心什麼時候關閉資源)
func t1() {
file = openfile("filename")
defer file.close()
}
func t2() {
con = opendatabase()
defer con.close()
}