The deferred call’s arguments are evaluated immediately, but the function call is not executed until the surrounding function returns.
A defer statement defers the execution of a function until the surrounding function returns.
in case of usage of several defer in function. Logic of executation is below;
“the first defer is executed last”
: = https://go.dev/tour/flowcontrol/12
DIFER es decir “DIFERIR” lo que hace simplemente diferir (atrasar) la ejecucion de la sentencia hasta finalizar la funccion donde se encuentra. En realidad la sentencia esta evaluada pero hasta que la funccion se termine no se ejecuta.
Aqui un ejemplo. Sentenciamos el cierre de conexion de DB, sabiendo que la sentencia se ejecutara como la ultimo sentencia de la funccion. Asi no se, nos olvida 😉
En caso de usar la sentencia difer en varios veces en la funccion. La logica seria, primer difer se exajutara el ultimo
db, err := getFromDb() if err != nil { fmt.Printf("Error getting Data from DB: %v", err) return } // antes de que se nos olvide, podemos ordenar el cierre de la conexion
// sabiendo que se va ejecutar esta linea al finalizar la funccion
defer db.Close() // por aqui hacemos lo que queramos ...
// .......
// ........
// ........
// sabemos que la linea DEFER se va ejecujar como la ultima sentencia
// de la funccion