When you look at your go code and see the go keyword, your first thought is like ok this is non-blocking because it’s prefixed with the go keyword. But sometimes this assumption may be wrong, let’s explore why.
How easy would it be to remove item(s) from a slice, while iterating that slice? It seems to be a trivial task, so lets see how to accomplish this in Go programming language.
Once upon a time, I’ve decided to contribute to an open source project written in Go. I thought no problem, fork it, make a change then pull request. Sounds good, but it wasn’t such a smooth experience.
Мой вольный перевод статьи Painless merge conflict resolution in Git.