在 Go 中,延遲函數呼叫允許您在周圍函數返回後執行程式碼。但是,如果您不了解如何處理參數,則延遲呼叫的行為可能會令人困惑。
「Go 之旅」中的引述指出「延遲呼叫的參數會立即求值,但直到周圍函數返回後才會執行函數呼叫。」這表示:
讓我們檢查一下提供的範例:
func def(s string) func() { fmt.Println("tier up") fmt.Println(s) return func() { fmt.Println("clean up") } } func main() { defer def("defered line")() fmt.Println("main") }
何時main() 被調用,會發生以下情況:
理解參數求值和函數執行之間的區別對於在 Go 中有效使用延遲呼叫至關重要。執行 defer 語句時會立即計算參數,而函數體僅在封閉函數傳回時執行。這使您可以控制執行操作的順序,並避免與意外函數行為相關的潛在問題。
以上是Go 延遲呼叫:參數是立即求值還是在函數執行時求值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!