移動中のチャンネルの動的なリストに入力するために選択しますか?

StackOverflow https://stackoverflow.com/questions/4220745

  •  26-09-2019
  •  | 
  •  

他のヒント

package main

import "fmt"

func main() {
    c1 := make(chan int)
    c2 := make(chan int)

    go func() { c1 <- 1 }()
    go func() { c2 <- 2 }()

    cs := []chan int{c1, c2}
    cm := make(chan [2]int)

    for idx, c := range(cs) {
        go func(idx int, c chan int) {
            cm <- [2]int{idx, <-c}
        }(idx, c)
    }

    fmt.Print(<-cm)
    fmt.Print(<-cm)
}

プリント[0 1][1 2](または多分[1 2][0 1])。

おそらく、このようなものが適用される場合があります?

// multiplex takes a slice of chan ints and returns a channel
// that multiplexes between all of them.
func multiplex(chs []<-chan int) <-chan int {
    c := make(chan int)
    d := make(chan bool)
    for _, ch := range chs {
        go func(ch <-chan int) {
            for r := range ch {
                c <- r
            }
            d <- true
        }(ch)
    }
    go func() {
        for i := 0; i < len(chs); i++ {
            <-d
        }
        close(c)
    }()
    return c
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top