Golang diferir

Golang diferir
La función de diferir en GO le permite retrasar la ejecución de una función hasta que salga la otra función. En la mayoría de los casos, utilizamos la palabra clave de diferir para retrasar la ejecución de una función más adelante en el programa para la limpieza. Un ejemplo sería cerrar un archivo, cerrar un canal o cerrar un mutex. Esto no es diferente si está familiarizado con finalmente o asegurarse en otros lenguajes de programación.

Usemos esta guía para aprender a usar la palabra clave de diferir en Go.

Golang diferir la palabra clave.

Para agregar mecanismo de diferir a una función, use la palabra clave de diferir seguida de la función o el nombre del método. Un código de ejemplo es como se muestra:

paquete principal
importar "fmt"
func Main ()
fmt.Println ("Running First")
diferir FMT.Println ("Ejeco Último")
fmt.Println ("Corrí en segundo")

En el ejemplo anterior, usamos la palabra clave de diferir a las palabras para retrasar la ejecución de la función en la cuarta línea. Esto significa que esta función se ejecutará la última.

Una salida de ejemplo es como se muestra:

$ Go Run Charla.ir
Corro primero
Corro segundo
Corro el último

Esto significa que el método solo se ejecuta después de que todos los demás métodos regresen.

Tenga en cuenta que la función o el método llamado con una palabra clave de diferir se ejecutará siempre que los otros métodos/funciones regresen. El retorno puede ser a través de un pánico o una ejecución normal.

Considere el ejemplo a continuación donde se llama a un método a pesar de un pánico.

paquete principal
importar "fmt"
func Main ()
diferir FMT.Println ("Run")
pánico ("Pánico!!!")
fmt.Println ("No ejecuto")

El código anterior debe devolver:

$ Go Run Charla.ir
Corro
Pánico: pánico!!!
Goroutine 1 [Running]:
principal.principal()
+0x73
Estado de salida 2

Orden de ejecución

Los argumentos de una función diferida se evalúan de inmediato, aunque la ejecución se retrasa hasta que la función circundante regresa.

Si tiene más de una llamada de función diferida, GO los organiza en una lista y los ejecuta en el último orden (LIFO).

Podemos ilustrar esto usando un bucle simple para el bucle simple como se muestra a continuación:

paquete principal
importar "fmt"
func Main ()
fmt.Println ("I Comience")
para i: = 1; i <= 5; i++
diferir FMT.Println (i)

fmt.Println ("I Second")

Podemos ver el orden de ejecución en la salida:

empiezo
Yo segundo
5
4
3
2
1

Use la función de diferir para devolver un valor

Puede usar una función diferida anónima para acceder y cambiar los parámetros de retorno de la función circundante.

Un ejemplo es como se muestra:

Func Say () (Str String)
diferir func ()
str = "Adiós"
()
Regresar "Hola!"

En este ejemplo, la función devuelve la cadena "adiós" en lugar de "hola".

Diferir el uso práctico - archivo cerrado

Un caso de uso del mundo real de la palabra clave de diferir es cerrar un archivo. Tome el ejemplo que se muestra a continuación:

Archivo, err: = OS.Abierto ("Hola.TXT")
Si err != nulo
registro.Fatal (err)

aplazar el archivo.Cerca()
escáner: = bufio.Newscanner (archivo)
escáner.División (bufio.Palabras de escaneo)
para escáner.Scan ()
fmt.Println (escáner.Texto())

Si err: = Scanner.Errar(); errar != nulo
registro.Fatal (err)

Abrimos el archivo para leer usando el método Open () en el ejemplo anterior. Luego usamos la palabra clave de diferir para retrasar la operación de cierre después de que se completa la operación de lectura.

Conclusión

En este artículo, discutimos cómo funciona para diferir la palabra clave y cómo podemos usarla para retrasar la ejecución de una función.

Gracias por leer!!