Aplazar palabra clave en Golang

En el lenguaje Go, las instrucciones diferidas retrasan la ejecución de la función o el método o un método anónimo hasta que regresan las funciones cercanas. En otras palabras, los argumentos de llamadas a funciones o métodos diferidos se evalúan instantáneamente, pero no se ejecutan hasta que regresan las funciones cercanas. Puede crear un método diferido, una función o una función anónima utilizando la palabra clave defer.

Sintaxis:

// Function
defer func func_name(parameter_list Type)return_type{
// Code
}

// Method
defer func (receiver Type) method_name(parameter_list){
// Code
}

defer func (parameter_list)(return_type){
// code
}()

Puntos importantes:

  • En el lenguaje Go, se permiten varias sentencias diferidas en el mismo programa y se ejecutan en orden LIFO (Último en entrar, primero en salir) como se muestra en el Ejemplo 2.
  • En las instrucciones defer, los argumentos se evalúan cuando se ejecuta la instrucción defer, no cuando se llama.
  • Las sentencias diferidas se utilizan generalmente para garantizar que los archivos se cierren cuando su necesidad haya terminado, o para cerrar el canal, o para detectar pánicos en el programa.

Analicemos este concepto con la ayuda de un ejemplo:

Ejemplo 1: 

Go

// Go program to illustrate the
// concept of the defer statement
package main
 
import "fmt"
 
// Functions
func mul(a1, a2 int) int {
 
    res := a1 * a2
    fmt.Println("Result: ", res)
    return 0
}
 
func show() {
    fmt.Println("Hello!, GeeksforGeeks")
}
 
// Main function
func main() {
 
    // Calling mul() function
    // Here mul function behaves
    // like a normal function
    mul(23, 45)
 
    // Calling mul()function
    // Using defer keyword
    // Here the mul() function
    // is defer function
    defer mul(23, 56)
 
    // Calling show() function
    show()
}

Producción: 

Result:  1035
Hello!, GeeksforGeeks
Result:  1288

Explicación: En el ejemplo anterior, tenemos dos funciones llamadas mul() y show() . Donde la función show() se llama normalmente en la función main() , la función mul() se llama de dos maneras diferentes:

  • Primero, llamamos a la función mul normalmente (sin la palabra clave defer), es decir, mul (23, 45) y se ejecuta cuando se llama a la función (Salida: Resultado: 1035).
  • En segundo lugar, llamamos a la función mul() como una función diferida usando la palabra clave diferida, es decir, diferida mul(23, 56) y se ejecuta (Salida: Resultado: 1288) cuando regresan todos los métodos circundantes.

Ejemplo 2:

Go

// Go program to illustrate
// multiple defer statements, to illustrate LIFO policy
package main
 
import "fmt"
 
// Functions
func add(a1, a2 int) int {
    res := a1 + a2
    fmt.Println("Result: ", res)
    return 0
}
 
// Main function
func main() {
 
    fmt.Println("Start")
 
    // Multiple defer statements
    // Executes in LIFO order
    defer fmt.Println("End")
    defer add(34, 56)
    defer add(10, 10)
}

Producción:

Start
Result:  20
Result:  90
End

Publicación traducida automáticamente

Artículo escrito por ankita_saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *