Compreendendo a funcionalidade da palavra-chave defer do Go
Ao trabalhar com Go, compreender o comportamento da palavra-chave defer é crucial. Esta palavra-chave permite aos desenvolvedores adiar a execução de uma função até que a função circundante retorne. No entanto, é importante observar que o valor e os parâmetros da função são avaliados quando a instrução defer é executada.
Exemplo: avaliando a ordem de defer
Para ilustrar isso, considere o seguinte código:
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
}
Neste exemplo, o código é executado na seguinte ordem:
Aplicando o Princípio Defer
Para resolver o problema mencionado na consulta original, podemos usar a palavra-chave defer para imprimir corretamente o preço do ingresso com base na idade inserida. Abaixo está uma versão modificada do código: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 Neste código modificado, aproveitamos corretamente a palavra-chave defer para garantir que a idade e o preço do ingresso sejam impressos após a execução das respectivas funções, resolvendo o problema inicial.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3