首頁 > 後端開發 > Golang > 為什麼在 Go 的 `defer` 語句中的閉包體後面使用「( )」?

為什麼在 Go 的 `defer` 語句中的閉包體後面使用「( )」?

Barbara Streisand
發布: 2024-12-02 18:55:11
原創
691 人瀏覽過

Why Use

Go 中閉包體中“( )”背後的原理

Go 中,在閉包體後添加“( )”並不特定於閉包,而是適用於defer 語句中的任何函數呼叫。語言規範要求 defer 語句中的表達式必須始終是函數呼叫。

考慮範例:

defer f()
登入後複製

此表達式嘗試延後函數 f 本身的執行,這是沒有意義的。相反,正確的語法是:

defer f()()
登入後複製

這會建構一個閉包,捕獲當前上下文並在啟動 defer 語句時執行函數 f。外面的括號立即執行閉包,確保函數呼叫在 defer 語句執行後發生。

這種語法與 Go 中函數呼叫的一般用法一致,總是需要括號來執行它們。例如,要在定義閉包時列印i 的值,請使用以下語法:

defer func(n int) { fmt.Println(n) }(i)
登入後複製

相反,要在執行閉包時列印i 的值,請使用:

defer func() { fmt.Println(i) }()
登入後複製

理解這個原則可以清楚地理解Go 中defer 語句的行為以及閉包體內「( )」的正確用法,以及超越。

以上是為什麼在 Go 的 `defer` 語句中的閉包體後面使用「( )」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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