Sometimes we need to instruct a goroutine to stop what it is doing, for example, in a web server performing a computation on behalf of a client that has disconnected.
There is no way for one goroutine to terminate another directly, since
that would leave all its shared variables in undefined states.
In the rocket launch program (§8.7)
we sent a single value on a channel named
abort, which the
countdown goroutine interpreted as a request to stop itself.
But what if we need to cancel two goroutines, or an arbitrary number?
One possibility might be to send as many events on the
abort channel as there are goroutines to cancel. If some of the goroutines have already terminated themselves, however, our count will be too large, ...