check if a channel is open in go

To check if a channel is open in Go, we can use the built-in function cap. cap returns the capacity of a channel, which is the maximum number of elements it can hold without blocking. If the channel is closed, cap returns zero.

Here's an example:

main.go
package main

import "fmt"

func main() {
    ch := make(chan int, 5)
    fmt.Println(cap(ch))

    close(ch)
    fmt.Println(cap(ch))
}
137 chars
12 lines

In this example, we create a buffered channel ch with a capacity of 5. We then print its capacity using cap, which outputs 5. We then close the channel using close, and print its capacity again, which now outputs 0 since the channel is closed.

Note that checking if a channel is open is usually not necessary or recommended in Go, since sending to or receiving from a closed channel will result in a panic. It's typically better to use the select statement with a final default clause to handle cases where a channel is closed.

gistlibby LogSnag