In Golang, the defer
keyword is used to delay the execution of a function or a statement until the nearby function returns.
In simple words, defer
will move the execution of the statement to the very end inside a function.
defer fmt.PrintIn("Hello")
package mainimport "fmt"func greet() {defer fmt.Println("World")fmt.Println("Hello")}func main() {greet()}
If we invoke the greet()
function, the compiler will go to defer fmt.Println("World")
(line 5), but since it finds the defer
keyword, it will not execute it until it reaches the end of the function. Thus, the compiler will move to fmt.Println("Hello")
(line 6) and execute it first instead.
Multiple defer
statements are allowed in the same program and will be executed in the reverse order in which they were deferred. In other words, they will follow the
The code snippet below shows an example of multiple defer
statements.
package mainimport "fmt"func main() {defer fmt.Println("World")defer fmt.Println("One")defer fmt.Println("Two")fmt.Println("Hello")}
In the above code, we add the defer
keyword to three out of the four statements, as we can see in the console.
When we run the code, World
, One
, and Two
will be pushed in a stack and will be executed in LIFO order before the function returns.