理解 Go 的 Defer 關鍵字的功能
在使用 Go 時,理解 defer 關鍵字的行為至關重要。此關鍵字允許開發人員推遲函數的執行,直到周圍的函數返回。但是,請務必注意,執行 defer 語句時會評估函數的值和參數。
範例:評估Defer Order
為了說明這一點,請考慮以下內容程式碼:
<code class="go">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 }</code>
在此範例中,程式碼按以下順序執行:
應用Defer 原則
為了解決原始查詢中提到的問題,我們可以使用defer 關鍵字來正確列印基於票價的票價關於輸入的年齡。以下是程式碼的修改版本:
<code class="go">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: return 9.99 case age > 13 && age < 65: return 19.99 default: return 12.99 } } func getAge(age *int) int { fmt.Println("...order is 1...") fmt.Print("Enter age=") fmt.Scanln(age) return *age }</code>
在這個修改後的程式碼中,我們正確地利用了defer 關鍵字來確保年齡和票價在對應函數執行後列印,解決了最初的問題.
以上是Go 的 Defer 關鍵字如何在函數執行順序中發揮作用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!