Introduction
Channels let different parts of a Go program talk to each other safely and easily.
When you want two parts of your program to send messages to each other.
When you need to wait for some work to finish before moving on.
When you want to share data between different running tasks without mistakes.