I'm not following what you're saying.
I'm saying "mu.Unlock()" except when deferred, is essentially always a bug. At the very least it's a bug waiting to happen. You need to prove that everything between Lock and Unlock is exception-safe. And that's rarely possible.
As I've said elsewhere you cannot rely on panic triggering program exit, since e.g. HTTP handlers swallow panics.
The fact that you seem to be saying you never see an Unlock deferred proves my point that saying "Go doesn't have exceptions" hurts Go programming. And Go code is in fact full of bugs because there's all this exception-unsafe code.
C++ is naturally exception safe, because RAII. Where it's not exception safe it's because RAII was not used.
Even something as simple as:
mu.Lock()
stats[metricName]++
mu.Unlock()
will throw if there's a path where stats[] map was not inited, and if called in an HTTP handler will leave the lock in place, leading to probably a deadlock of the server. Not great.