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

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

Barbara Streisand
Barbara Streisand原創
2024-12-02 18:55:11692瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn