To postpone or defer an inner function's execution until the outer or surrounding function execution completes, you can use the defer
keyword followed by the function call in Go or Golang.
TL;DR
package main
import "fmt"
// function that prints string to the terminal
func sayBye(){
fmt.Println("Bye, Have a nice day!")
}
func main(){
// postpone or defer the `sayBye()` function call until the
// `main()` function execution completes
defer sayBye()
fmt.Println("I will be executed first")
}
For example, let's say we have a function called sayBye()
which prints Bye, Have a nice day!
to the user only after the main
function execution completes.
To do that first let's make the sayBye()
function that prints the string Bye, Have a nice day!
to the console or terminal like this,
package main
import "fmt"
// function that prints string to the terminal
func sayBye(){
fmt.Println("Bye, Have a nice day!")
}
Now at the top of the main()
function, we can use the defer
keyword followed by the sayBye()
function call like this,
package main
import "fmt"
// function that prints string to the terminal
func sayBye(){
fmt.Println("Bye, Have a nice day!")
}
func main(){
// postpone or defer the `sayBye()` function call until the
// `main()` function execution completes
defer sayBye()
}
Since we don't have many lines of code to see the working correctly, let's add another Println()
function to show the string of I will be executed first
after the defer
statement like this,
package main
import "fmt"
// function that prints string to the terminal
func sayBye(){
fmt.Println("Bye, Have a nice day!")
}
func main(){
// postpone or defer the `sayBye()` function call until the
// `main()` function execution completes
defer sayBye()
fmt.Println("I will be executed first")
}
The output of running the above code will look like this,
I will be executed first
Bye, Have a nice day!
As you can see that the I will be executed first
string is shown before the string Bye, Have a nice day!
even though it is evaluated first.
We have successfully postponed or deferred the function call. Yay 🥳.
See the above code live in The Go Playground.
That's all 😃!