Golang defer

Golang defer

defer最主要的价值是, 在函数执行完毕后,可以及时的释放函数创建的资源

func test(){
	file = openfile()
	defer file.close()
}
  1. 当执行到defer时, 不会立即执行defer,而是将defer后的语句压入到一个栈中,然后继续执行
    函数下一个语句

  2. 当函数执行完毕后,从defer栈中,依次出栈

func sum(a, b int) (res int) {
	//执行到defer时, 会将defer后面的语句压入到一个栈中,函数运行完后依次出栈
	defer fmt.Println(a)
	defer fmt.Println(b)
	res = a + b
	fmt.Println(res)
	return
}
func main() {
	sum(10, 20)// 30 ->20 ->10
}
  1. defer是将值拷贝到栈中,当外部值修改时,不会对栈中的值产生影响
func sum(a, b int) (res int) {
	//执行到defer时, 会将defer后面的语句压入到一个栈中,函数运行完后依次出栈
	defer fmt.Println(a)
	defer fmt.Println(b)
	a++
	b++
	res = a + b
	fmt.Println(res)
	return
}
func main() {
	sum(10, 20)
}
posted @ 2020-08-09 15:41  CyberPelican  阅读(103)  评论(0编辑  收藏  举报