🥇 Aplazar funciones con Defer

🍿 En que consiste la sentencia “defer”?

Defer es una caracteristica que permite que Go aplace la ejecución de una funcion. Esto puede ser por ejemplo cuando otra función termina de ejecutarse.

El aplazmiento de funciones es generalmente utilizado para realizar tareas de limpieza, una vez que se han completado las actividades a realizar por parte del algoritmo, como cerrar conexiones a base de datos, borrar archivos temporales, limpiar el cache, liberar la memoria, etc.

Supongamos ahora que deseamos conectarnos a la base de datos, y queremos que despues de todas las operaciones se realice automaticamente la desconexión, independientemente del flujo de trabajo que el algoritmo siga.

🍿 Ejemplo del uso de la sentencia “defer”

package main

import "fmt"

func desconectar() {
    fmt.Println("Se ha desconectado de la base de datos")
}

func leer() {
    fmt.Println("Se han leido los registros de la base de datos")
}

func actualizar() {
    fmt.Println("Se han actalizado registros de la base de datos")
}

func conectar() {
    fmt.Println("Se ha conectado a la base de datos")
}

func main() {
    conectar()
    defer desconectar()
    leer()
    actualizar()
}

🍿 Descripción del ejemplo del uso de la sentencia “defer”

En este caso hemos creado 4 funciones…

El orden en el que se invocan las funciones es el siguiente…

conectar()
defer desconectar()
leer()
actualizar()

Debido a que desconectar() esta precedido de defer, esta automaticamente se disparará hasta el final de la ejecución de las demas funciones. Si ejecutamos el programa nos entregará lo siguiente.

Se ha conectado a la base de datos
Se han leido los registros de la base de datos
Se han actalizado registros de la base de datos
Se ha desconectado de la base de datos

Se pueden utilizar multiples defer, pero hay que tomar en cuenta que el orden en el que se ejecuten es el inverso en el que se definan. Es decir el primero que se defina sera el ultimo, el segundo el penúltimo, el tercero el antepenúltimo, etc.

Uso del bucle for. Arreglos (Arrays).
comments powered by Disqus