首頁 > 後端開發 > Golang > Go 中的延遲函數參數會發生什麼事?

Go 中的延遲函數參數會發生什麼事?

DDD
發布: 2024-12-20 12:37:11
原創
588 人瀏覽過

What Happens to Deferred Function Arguments in Go?

評估延遲函數參數

問題: Go 之旅中的一句話立即指出「延遲調用的參數立即指出進行評估。

答案:

在 Go 中,defer 語句會延遲函數的執行,直到封閉函數傳回。但是,延遲函數的參數的評估會立即發生。

分解評估過程:

規範規定對於每個「defer」語句:

  • 函數值:
  • 函數值:

函數值:

函數值:

要延遲的函數計算為通常。

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")
}
登入後複製
參數:

延遲函數的參數也會立即計算。

實際的函數呼叫在周圍函數返回之前不會執行。
  1. 範例:
  2. 考慮下列內容程式碼:
  3. 求值順序:
  4. 求值順序:
求值順序:

請問

def() 參數求值:參數「defered line」立即求值.def() 函數求值:呼叫 def() 函數,列印「tier up」和「defered line」。 延遲函數計算: def() 的回傳值被計算,這是一個函數列印「clean up.」延遲函數執行:當main()返回時,執行延遲函數,列印「清理。」結論:當使用 defer 語句時,延遲函數的參數會立即計算。此過程可確保函數在執行時可以存取變數的最新值。然而,延遲函數的實際執行會被延遲,直到周圍的函數返回。

以上是Go 中的延遲函數參數會發生什麼事?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板