首頁 >後端開發 >Golang >Go 中的 defer 如何處理函數參數?

Go 中的 defer 如何處理函數參數?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-04 03:49:02300瀏覽

How does defer work with function parameters in Go?

理解Go 中「defer」的複雜性

Go 中的Defer 是一個強大的關鍵字,可以讓你推遲函數的執行呼叫直到封閉函數返回。然而,在使用 defer 時,掌握函數參數和傳回值的求值順序至關重要。

求值順序和Defer

根據Defer_statements 的文檔,每次執行「defer」語句時,「調用的函數值和參數都會照常評估並重新儲存,但實際函數不會被呼叫。

場景

讓我們深入研究一下進入一個特定的範例,您無法根據使用者的年齡正確計算票價。您的程式碼定義了對 printTicket 的延遲調用,參數為 TicketPrice。您期望根據提供的年齡設定ticketPrice並返回適當的票價。

問題

問題的出現​​是因為您試圖透過printTicket 的未初始化「ticketPrice」。當在 main 返回期間執行對 printTicket 的延遲呼叫時,未初始化的「ticketPrice」將導致預設值為零,導致僅列印 9.99 的價格。

解決方案

要解決此問題,您應該在推遲調用之前將“ticketPrice”初始化為正確的值打印票。或者,您可以使用修改後的函數呼叫語法,允許您透過引用傳遞“ticketPrice”,確保延遲呼叫獲取更新的值。

範例

這是程式碼的修改版本,示範了defer 的正確用法:

透過這些修改, 「ticketPrice」變數將在“printTicket”調用之前正確初始化,確保計算並列印正確的門票價格。

以上是Go 中的 defer 如何處理函數參數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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