私彩网站开发多少钱网站推广怎么推广
定义
当前函数返回之前执行传入函数的一个关键字
执行时间
当前函数返回前执行
常用于
- 关闭文件描述符
- 关闭数据库链接
- 解锁资源
原理
参考:https://draveness.me/golang/docs/part2-foundation/ch05-keyword/golang-defer/
后调用的 defer 函数会先执行:
- 后调用的 defer 函数会被追加到 Goroutine _defer 链表的最前面;
- 运行 runtime._defer 时是从前到后依次执行;
函数的参数会被预先计算;
- 调用 runtime.deferproc 函数创建新的延迟调用时就会立刻拷贝函数的参数,函数的参数不会等到真正执行时计算;
Go 语言中所有的函数调用都是传值的
参考:https://draveness.me/golang/docs/part2-foundation/ch05-keyword/golang-defer/
pannic之后会执行defer吗
会
- panic之后,有序退出,会执行defer链表
- 参考:https://ieevee.com/tech/2017/11/23/go-panic.html
- 后进先出
defer执行
package mainimport "fmt"func main() {fmt.Println("main : ",test())}func test() int {a := 1defer func() {a++fmt.Println("defer",a)}()fmt.Println(a)return jjjj(&a)
}func jjjj(a *int) int {*a++return *a
}