Go defer关键字的实现原理?

2023-08-11 14:19:18 阅读:762 评论:0 点赞:0

defer 能够让我们推迟执行某些函数调用,推迟到当前函数返回前才实际执行。deferpanicrecover 结合,形成了Go语言风格的异常与捕获机制。defer 语句经常被用于处理成对的操作,如文件句柄关闭、连接关闭、释放锁。虽然 defer 方便开发者使用,但是也有一定的性能损耗。

函数退出前,按照先进后出的顺序,执行 defer 函数。panic 后的 defer 函数不会被执行(遇到 panic,如果没有捕获错误,函数会立刻终止)。panic 没有被 recover 时,抛出的 panic 到当前 goroutine 最上层函数时,最上层程序直接异常终止。

实现原理:
将 defer 函数直接插入到函数的尾部,无需链表和栈上参数拷贝,性能大幅提升。把 defer 函数在当前函数内展开并直接调用,这种方式被称为 open coded defer

标签: go defer

不拘一格

职业:后端开发工程师
学校:重庆师范大学
城市:重庆
文章:165
一个喜欢学习的人,快来和我成为朋友吧....

登录逐梦笔记

注册逐梦笔记

已有账号?