一:defer规则:
1:延迟函数的参数在defer语句出现时就已经确定下来了
2:延迟函数执行按后进先出顺序执行,即先出现的defer最后执行
3:延迟函数可能操作主函数的具名返回值
二:return
return不是原子操作,return i具体执行过程,1给返回值赋值(若有),2执行defer(若有),3执行跳转
三:derfer实现原理
type _defer struct {
sp uintptr //函数栈指针
pc uintptr //程序计数器
fn *funcval //函数地址
link *_defer //指向自身结构的指针,用于链接多个defer
}
插入是头插,执行的时候就是一个一个的取出来执行就好。