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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/golang-nuts/db2345ea-b8e6-4a98-8280-a883cb09cdfen%40googlegroups.com.