常被用于資源釋放、解除鎖定以及錯誤處理等操作呛讲。
注意:
- 延遲調(diào)用注冊的是調(diào)用,必須提供執(zhí)行所需參數(shù)(哪怕為空)返奉。參數(shù)值在注冊時(shí)被復(fù)制并緩存起來贝搁。如對狀態(tài)敏感,可改用指針或閉包芽偏。
- 延遲調(diào)用可修改當(dāng)前函數(shù)命名返回值雷逆,但其自身返回值被拋棄。
- 多個(gè)延遲注冊按FILO次序執(zhí)行污尉。
return和panic語句都會終止當(dāng)前函數(shù)流程膀哲,引發(fā)延遲調(diào)用。另外被碗,return語句不是ret匯編指令某宪,它會先更新返回值。
誤用
千萬記住锐朴,延遲調(diào)用在函數(shù)結(jié)束時(shí)才被執(zhí)行兴喂。不合理的使用方式會浪費(fèi)更多資源,甚至造成邏輯錯誤焚志。
性能
相比直接用CALL匯編指令調(diào)用函數(shù)衣迷,延遲調(diào)用須花費(fèi)更大代價(jià)。這其中包括注冊酱酬、調(diào)用等操作壶谒,還有額外的緩存開銷。尤其是那些性能要求高且壓力大的算法岳悟,應(yīng)避免使用延遲調(diào)用佃迄。