Go-defer

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()
}
posted @ 2020-12-22 10:02  JinweiChang  阅读(117)  评论(0编辑  收藏  举报