How to get execution time in golang
In this shot, we will learn how to calculate the execution time for a function in golang.
We will use the defer statement to execute a function right before the main() function returns.
Approach
We will follow the below approach:
-
We will create a function where at first we will capture the present time, and
-
We will return an anonymous function which will print the time difference,
-
Since we don’t want to print the time difference when it is called, so we will call this function with
defer, then the anonymous function will execute at a later time, that is when the surrounding function returns. -
Here we will use a surrounding function as
main()function. It means the anonymous function will execute right before themain()function returns.
Let us take a look at an example.
Example
In the following example, we will create a function getExecutionDuration() to get execution duration. This function returns a function that prints the time difference, we will make it execute at a later period of time, using defer statement before getExecutionDuration() call.
The returned function will execute right before the main() function returns. So it will calculate how much duration the main() took to execute.
Code
package main//import packagesimport("fmt""time")//program execution starts herefunc main() {//deferred statementdefer getExecutionDuration()()//make the program to sleep for 3 secondstime.Sleep(time.Second * 3)}//function to calculate time differencefunc getExecutionDuration() func() {//get time when execution startedstart := time.Now()return func() {//executes right before main function returnsfmt.Println(time.Since(start))}}
Explanation
In the above code snippet,
- In Line 5: We are importing the format package
fmt, which is used to format the input and output. - In Line 6: We are importing the time package
time, which contains functions like Now(), sleep(), etc… - In Line 10: Program execution starts from the
main()function in golang. - In Line 12: We are calling a function
getExecutionDuration()()using the defer statement, the second()is used to call the returned function. - In Line 15: We are deliberately making the program sleep for
3seconds to show you the clear difference in execution time. - Line 19: From this line, we defined the function definition of the
getExecutionDuration().- In Line 21: We capture the time when the function
getExecutionDuration()is executed. - In Line 23: We are returning a function that will print the time difference from when the program execution started till this statement executes.
- In Line 25: We are printing the execution duration of the
main()function.
- In Line 21: We capture the time when the function
- Note that here Line 25 executes right before the
main()function returns.