Golang defer
Golang defer
defer最主要的价值是, 在函数执行完毕后,可以及时的释放函数创建的资源
func test(){
	file = openfile()
	defer file.close()
}
- 
当执行到 defer时, 不会立即执行defer,而是将defer后的语句压入到一个栈中,然后继续执行
 函数下一个语句
- 
当函数执行完毕后,从 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
}
- 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)
}

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号