Goroutines and channels
One of Go’s initial design requirements was to make it easy to create multi-threaded applications. While many languages support multi-threading, it’s not always easy to implement. Go wanted to make it easy to do this. Consider the following code where it runs sequentially. If you run this, every function call to PrintHello() has to complete…