In languages like C, we often need to free up reserved memory resources - commonly seen when using
free which allocates and deallocates memory respectively.
In Go, we pair allocation and deallocation of memory together. For example, if you want to open a network or Input-Output (IO) connection, you can use the
defer keyword on the
closeConnection() will be deferred to the point where it is exiting the function.
The utility of this comes here: Imagine that you opened the connection and have a close connection at the end of the function. However, if there is an exception in between these 2 statements, then the close connection call will never be called. That will mean that the allocated resources are never freed and will be kept occupied unnecessarily.
In a way, this is similar to the
finally block in Java, which ensures that the code in the
finally block will be executed.
Personally, it is also a simple and effective way to remember to close connections, because now in the next line that follows an
openConnection() call, I can immediately write
defer can only be used for a function call. For example,
defer x--, where
x is a variable, is not allowed and will throw an error.
In the following example, using defer postpones the second function call to
addOne() to the end of the function.
defer runs in last-in-first-out (LIFO) order. For example,