Go channels revisited
So far, we have seen the basic usages of channels—this section presents the definition and the usage of nil
channels, signal channels, and buffered channels.
Although channels seem like an interesting concept, they are not the answer to every concurrency problem as there exist times when they can be replaced by mutexes and shared memory. So, do not force the use of channels.
It helps to remember that the zero value of the channel type is nil
, and if you send a message to a closed channel, the program panics. However, if you try to read from a closed channel, you get the zero value of the type of that channel. So, after closing a channel, you can no longer write to it but you can still read from it. To be able to close a channel, the channel must not be receive-only.
Additionally, a nil
channel always blocks, which means that both reading and writing from nil
channels block. This property of channels can be very useful when you want...