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