If you are working with concurrent applications, you have to deal with more than one resource potentially accessing some memory location. This is usually called race condition.
In simpler terms, a race condition is similar to that moment where two people try to get the last piece of pizza at exactly the same time--their hands collide. Replace the pizza with a variable and their hands with Goroutines and we'll have a perfect analogy.
There is one character at the dinner table to solve this issues--a father or mother. They have kept the pizza on a different table and we have to ask for permission to stand up before getting our slice of pizza. It doesn't matter if all the kids ask at the same time--they will only allow one kid to stand.
Well, a mutex is like our parents. They'll control who can access the pizza--I mean, a variable--and they won't allow anyone else to access it.
To use a mutex, we have to actively lock it; if it's already locked (another Goroutine is using it), we'll have...