go语言 defer延迟机制
靠父母你是公主,靠男人你是王妃,靠自己你是乞丐。
func main() {
res = sum(10, 20)
fmt.Println("res=", res)
}
func sum(n1 int, n2 int) int {
// defer使用
defer fmt.Println("ok1 n1=", n1)
defer fmt.Println("ok2 n2=", n2)
res := n1 + n2
fmt.Println("ok3 res=", res)
return res
}
defer 注意事项
- 当go执行到一个defer时,不会立即执行defer后面的语句,而是将defer后的语句压入到一个栈中,然后再继续执行函数一下语句;
- 当函数执行完之后,在从defer栈中,依次从栈顶取出语句执行;
- 在defer语句放入到栈时,也会将相关的值拷贝同时入栈;
defer最佳价值就是在函数执行完之后,释放函数创建的资源