"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo funciona la palabra clave Defer de Go en el orden de ejecución de la función?

¿Cómo funciona la palabra clave Defer de Go en el orden de ejecución de la función?

Publicado el 2024-11-06
Navegar:500

How Does Go\'s Defer Keyword Work in Function Execution Order?

Comprender la funcionalidad de la palabra clave Defer de Go

Al trabajar con Go, comprender el comportamiento de la palabra clave aplazar es crucial. Esta palabra clave permite a los desarrolladores posponer la ejecución de una función hasta que regrese la función circundante. Sin embargo, es importante tener en cuenta que el valor y los parámetros de la función se evalúan cuando se ejecuta la instrucción aplazar.

Ejemplo: evaluación de la orden aplazar

Para ilustrar esto, considere lo siguiente 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
}

En este ejemplo, el código se ejecuta en el siguiente orden:

  1. la función que tiene se evalúa y devuelve una función que toma una cadena como entrada (orden de evaluación: 1)
  2. función divertida se evalúa con "with Go". cadena como entrada (orden de evaluación: 2)
  3. fmt.Print("some ") se ejecuta (orden de evaluación: 3)
  4. diferir llamadas a la función funWithGo con el resultado de fun (orden de evaluación: 4)

Aplicación del principio de aplazamiento

Para resolver el problema mencionado en la consulta original, podemos utilizar la palabra clave aplazar para imprimir correctamente el precio del billete según en la edad ingresada. A continuación se muestra una versión modificada del 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 

En este código modificado, aprovechamos correctamente la palabra clave defer para garantizar que la edad y el precio del boleto se impriman después de que se hayan ejecutado las funciones respectivas, resolviendo el problema inicial.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3