首頁 >後端開發 >Golang >為什麼 Go 中的延遲函數無法增加指定的回傳值?

為什麼 Go 中的延遲函數無法增加指定的回傳值?

Barbara Streisand
Barbara Streisand原創
2024-12-25 17:39:16775瀏覽

Why Does a Deferred Function Fail to Increment a Named Return Value in Go?

命名回傳值如何與延遲函數互動

在Go 中,命名回傳值允許函數透過名稱指定傳回值,而不是使用位置論點。命名返回值和延遲函數之間的交互可能會令人困惑,如以下示例所示:

func c() (i int) {
    defer func() { i++ }()
    return 1
}

根據文檔,該函數預計返回2:“延遲函數可以讀取並分配給返回函數的命名回傳值。

要理解這種行為,重要的是要記住,不帶參數的 return 語句會傳回指定的回傳值,稱為「裸回傳值」。 「返回。範例程式碼回傳1,因為它使用了return 1,它明確地將回傳值指定為1。

延遲函數在return 語句之後執行,遞增i。但是,此增量不會影響命名回傳值i,因為它有效地將新值指派給延遲函數內的局部變數。相當於:

在具有命名返回值變數i 的函數中,賦值i = 1 設定命名回傳值,而return 語句只是退出函數,允許延遲函數執行並修改本地變數i 變數不影響指定的回傳值。

以上是為什麼 Go 中的延遲函數無法增加指定的回傳值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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