了解 Go 的 Defer 關鍵字的功能
使用 Go 時,了解 defer 關鍵字的行為至關重要。此關鍵字允許開發人員推遲函數的執行,直到周圍的函數返回。但是,需要注意的是,函數的值和參數在執行 defer 語句時進行評估。
範例:評估 Defer Order
為了說明這一點,請考慮以下內容代碼:
package main
import "fmt"
func main() {
defer having()(fun("with Go."))
fmt.Print("some ") // evaluation order: 3
}
func having() func(string) {
fmt.Print("Go ") // evaluation order: 1
return funWithGo
}
func fun(msg string) string {
fmt.Print("have ") // evaluation order: 2
return msg
}
func funWithGo(msg string) {
fmt.Println("fun", msg) // evaluation order: 4
}
在此範例中,程式碼按以下順序執行:
應用Defer原則
要解決原始查詢中提到的問題,我們可以使用defer關鍵字來正確列印基於票價的票價關於輸入的年齡。以下是程式碼的修改版本:
package main
import "fmt"
func main() {
age := 999
defer fmt.Println("Your age is:", getAge(&age)) // defer printing the age
defer fmt.Println("Your ticket price is:", getTicketPrice(age)) // defer printing the ticket price
}
func getTicketPrice(age int) float64 {
// Calculate ticket price based on age
// logic can be customized here
fmt.Println("...order is 2...")
switch {
case age 13 && age 在這段修改後的程式碼中,我們正確地利用了 defer 關鍵字來確保在執行相應函數後列印年齡和票價,解決了最初的問題。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3