Closing Go Channels

Let’s learn how to close the Go channels.

So far, we have seen basic usages of channels—this lesson presents the definition and the usage of nil channels, signal channels, and buffered channels.

Closing a channel

It helps to remember that the zero value of the channel type is nil, and that if we send a message to a closed channel, the program panics. However, if we try to read from a closed channel, we get the zero value of the type of that channel. So, after closing a channel, we can no longer write to it, but we 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 execution. This property of channels can be very useful when we want to disable a branch of a select statement by assigning the nil value to a channel variable. Finally, if we try to close a nil channel, our program is going to panic.

Coding example

This is best illustrated in the closeNil.go program:

Get hands-on with 1400+ tech skills courses.