首頁 > 後端開發 > Golang > 主體

為什麼我的 Defer 語句沒有產生 Go 中的預期票價?

Susan Sarandon
發布: 2024-10-30 18:30:18
原創
370 人瀏覽過

Why Does My Defer Statement Not Produce the Expected Ticket Price in Go?

defer 關鍵字在Go 中的工作原理

在Go 中,defer 關鍵字允許您延遲函數或語句的執行,直到函數或語句的執行,直到周圍的函數返回。但是,延遲函數的值和參數會立即求值,並在 defer 語句時綁定到函數呼叫。

理解延遲求值順序

例如,以下程式碼:

defer fmt.Println("Your age is:", getAge(age))
登入後複製

延後函數fmt.Println 的執行,並綁定defer 語句時的age值。然而,實際的 fmt.Println 函數呼叫將在周圍函數返回之前以相反的順序執行。

票價計算中的應用程式

在你的例子中,你想根據使用者的年齡計算票價:

defer fmt.Println("Your ticket price is:", printTicket(age, ticketPrice))
登入後複製

這裡,defer語句綁定了defer語句時的age和ticketPrice的值。當主函數傳回時,將使用age和ticketPrice的綁定值來呼叫printTicket。但是,由於僅執行年齡

解決問題

要解決問題,請確保printTicket 中的所有必要條件都會在函數延遲之前進行評估。這是修改後的版本:

defer fmt.Println(*age)

if *age <= 13 {
    ticketPrice = 9.99
} else if *age > 13 && *age < 65 {
    ticketPrice = 19.99
} else if *age >= 65 {
    ticketPrice = 12.99
}
defer fmt.Println(ticketPrice)
登入後複製

現在,fmt.Println(*age) 和fmt.Println(ticketPrice) 都將被推遲並以相反的順序執行,顯示正確的年齡和票價。

以上是為什麼我的 Defer 語句沒有產生 Go 中的預期票價?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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