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