深入了解golang中的defer关键字
golang中的defer关键字是用来声明一个延迟函数,一般称这个函数为defer函数,该函数会在defer语句所在的函数返回之前会执行。通过defer关键字,我们可以修改函数命名返回值,进行资源释放等操作,总的来说defer函数有如下特点和功能:
- 函数返回之前执行
- 可以放在函数中任意位置
- 可以同时设置多个defer函数,多个defer函数执行遵循FILO顺序
- defer函数的传入参数在定义时就已经明确
- 可以修改函数中的命名返回值
- 用于文件资源,锁资源、数据库连接等释放和关闭
- 和recover一起处理panic
本文将介绍defer上面的几个特性,如果想深入了解defer底层实现机制,可以阅读笔者写的《深入Go语言之旅 - 基础篇 - defer函数》。
defer会在函数返回之前执行
当程序执行一个函数时候,会将函数的上下文(输入参数,返回值,输出参数等信息)作为栈帧放在程序内存的栈中,当函数执行完成之后,设置返回值并返回,此函数才真正完成执行。
defer语句函数会在函数返回之前执行,下面程序将会依次输出B A:


