在函数中,程序员经常需要创建资源(比如,数据库连接,文件句柄,锁等),为了在函数执行完毕后,及时释放资源,go设计者提供defer(延时机制)

(十八)golang--defer关键字_文件句柄

 用defer申明的语句不会立即执行,而是被存入到defer栈中,在程序执行完毕后,再从栈中取出(先进后出):

(十八)golang--defer关键字_释放资源_02

 

 需要注意的是,如果defer中存在值,会将相应值的拷贝同入栈:
(十八)golang--defer关键字_文件句柄_03(十八)golang--defer关键字_释放资源_04

 

 defer主要的价值是当函数执行完毕后,可以及时的释放函数创建的资源: