In golang, concurrency is implemented with goroutine and we use channels to control them.
Often in concurrency programming, you will have a group of goroutines and want to terminate all of them if any one of them stops.
For example, you have a goroutine that read from a source and another goroutine write the result to output. If either the reader or the writer is done, you want to terminate the other.
Read more →