首页 >后端开发 >Golang >为什么我的 Defer 语句没有产生 Go 中的预期票价?

为什么我的 Defer 语句没有产生 Go 中的预期票价?

Susan Sarandon
Susan Sarandon原创
2024-10-30 18:30:18379浏览

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn