理解 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中文网其他相关文章!