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