Понимание функциональности ключевого слова defer в Go
При работе с Go понимание поведения ключевого слова defer имеет решающее значение. Это ключевое слово позволяет разработчикам отложить выполнение функции до тех пор, пока не вернется работа окружающей функции. Однако важно отметить, что значение и параметры функции оцениваются при выполнении оператора defer.
Пример: оценка порядка отсрочки
Чтобы проиллюстрировать это, рассмотрим следующее код:
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, чтобы правильно распечатать цену билета на основе по введенному возрасту. Ниже приведена модифицированная версия кода:
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