Middle
How to trigger a panic when working with a channel? What happens with nil-channel and closed channel operations?
sobes.tech AI
Answer from AI
Panic in Go when working with channels occurs in the following cases:
- Sending a value to a closed channel (
chan <- value) causes a panic. - Closing an already closed channel (
close(chan)) causes a panic.
Regarding nil-channels:
- Send and receive operations with a nil-channel block forever (deadlock), but do not cause a panic.
Example:
var ch chan int // nil-channel
// <-ch // blocks forever
// ch <- 1 // blocks forever
ch = make(chan int)
close(ch)
// ch <- 1 // panic: send on closed channel
close(ch) // panic: close of closed channel