On Thu, Sep 12, 2019 at 9:40 PM Andrey Tcherepanov
<xnow4fippy...@sneakemail.com> wrote:
>
> well, subj - why can't I "just"  do a select on a slice of channels? Yes, I 
> can run a bunch goroutines with of reads on an each channel, funnel it all 
> into 1 notification channel, pick up on the other side...  boring stuff, 
> really...
>
> But why not  "just"
>
> func main() {
>
>     cc := make([]chan interface{}, 10)
>
>     for i := 0; i < len(cc); i++ {
>         cc[i] = make(chan interface{})
>     }
>
>     dd := make([]chan int)
>
>     for i := 0; i < 1000; i++ {
>         dd = append(dd, make(chan int))
>     }
>
>  select {
>
>    // do we need a special <-[] ?
>    case i, c, v, ok := <-[]cc:
>       fmt.Printf("cc replied : channel index %d, channel %v, value %v, 
> ok=%v", i, c, v, ok)
>
>
>    // or I dunno, not introducing a new op
>    case i, d, v, ok := <-dd:
>       fmt.Printf("dd sent something: channel index %d, channel %v, value %v, 
> ok=%v", i, d, v, ok)
>  }
>
>  // or shorter, but I hope you get the drift
>
>  select {
>    case i, c, ok := <-[]cc:
>       fmt.Printf("cc replied : channel index %d, channel %v, value %v, 
> ok=%v", i, c, <-c, ok)
>
>
>    case i, d, ok := <-dd:
>       fmt.Printf("dd sent something: channel index %d, channel %v, value %v, 
> ok=%v", i, d, <-d, ok)
>  }
> }
>
>
> Why? System limitations? Rarely needed?
>
> Feels like extending language to handle that would not be too much of 
> violation of an existing code. Ok, lets go nuts! Mirrored "cc <- value" for 
> sending to a slice of channels! -- it should pick randomly available channel 
> out of the slice of channels!

You actually can do it using the reflect package:
https://golang.org/pkg/reflect/#Select (not because we necessarily
want the reflect package to support selecting on a slice of channels,
but because there is no other reasonable way to write reflect.Select).

It's not in the language proper mainly because it doesn't seem to come
up very much.  I don't think there is even a proposal for it.  And
while anyone is welcome to write a proposal, it will need some
justification for why it will be worth the cost of complicating the
language.

Ian

-- 
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 on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAOyqgcX51e7RpZJwco%2BPwFc_kWU7EsQ_3kFWYL9basO5gGyc9A%40mail.gmail.com.

Reply via email to