常被用于资源释放、解除锁定以及错误处理等操作。
注意:
- 延迟调用注册的是调用,必须提供执行所需参数(哪怕为空)。参数值在注册时被复制并缓存起来。如对状态敏感,可改用指针或闭包。
- 延迟调用可修改当前函数命名返回值,但其自身返回值被抛弃。
- 多个延迟注册按FILO次序执行。
return和panic语句都会终止当前函数流程,引发延迟调用。另外,return语句不是ret汇编指令,它会先更新返回值。
误用
千万记住,延迟调用在函数结束时才被执行。不合理的使用方式会浪费更多资源,甚至造成逻辑错误。
性能
相比直接用CALL汇编指令调用函数,延迟调用须花费更大代价。这其中包括注册、调用等操作,还有额外的缓存开销。尤其是那些性能要求高且压力大的算法,应避免使用延迟调用。
网友评论