Go channels revisited
So far, we have seen basic usages of channels—this section presents the definition and the usage of nil
channels, signal channels, and buffered channels.
It helps to remember that the zero value of the channel type is nil
, and that 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 blocks. This property of channels can be very useful when you want to disable a branch of a select
statement by assigning the nil
value to a channel variable. Finally, if you try to close a nil
channel, your program is going to panic. This is best illustrated in the closeNil.go
program: