Usually you just set to nil any channel you do not want to use. You do also 
have to
typically keep track of whether a channel is closed already or not in a 
separate
bool variable that is protected by a mutex. But anyway, a nil chan can
still be used in a select. But if nil, then select {} will ignore it.

Remember that channels are reference types (pointers inside; like maps) so 
setting your local 
copy of a chan to nil will not effect the copy of the same chan elsewhere.

You can even call a function within the select case that returns nil or 
live channel depending
on an arbitrary condition you decide on. I call this "conditional send" or 
"conditional receive".
It is a useful pattern.

also useful:
import "github.com/glycerine/idem"  // just FYI, see NewHalter() for 
handling shutdown and channel wrappers that can can have Close() called 
many times. Useful for cleanup/shutdown sequences that have inherent 
non-determinism/multipath races.

example of conditional send/receive:

regularChan := make(chan int)

select {
  case: myInt  := <- conditionalReceive(regularChan):
  ...
  case conditionalSend(regularChan) <- 9:
  ...
}

func conditionalReceive(regularChan chan int) chan int {
     if youWantToReceiveNow {
           return regularChan
     }
    return nil
} 
func conditionalSend(regularChan chan int) chan int {
    if youWantToSendNow {
          return regularChan
     }
     return nil
}


On Thursday, October 24, 2024 at 2:08:33 PM UTC+1 Aniket Pandey wrote:

> Has anyone have implemented the logic in order to check if the channel is 
> active if the channel is active then only will write the data .if yes how 
> to do so?  As i am getting the Following error: *panic: **send on closed 
> channel*
>
> As a writer go routine i want to only write data to active channels 
> ..

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion visit 
https://groups.google.com/d/msgid/golang-nuts/db2345ea-b8e6-4a98-8280-a883cb09cdfen%40googlegroups.com.

Reply via email to