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()
}