select语句中的Golang通道对赋值

时间:2016-08-25 20:22:15

标签: go

有没有办法在select case语句中进行通道对分配?

在select语句之外,您可以执行以下操作,但它似乎不适用于select case语句。

var c1 = make(chan int)
var c2 = make(chan int)
a,b := <- c1, <- c2

为什么我不能执行以下操作:

var c1 = make(chan int)
var c2 = make(chan int)

go func () {
    c1 <- 11111
}()

go func () {
    c2 <- 22222
}()

select {
case a,b := <- c1, <- c2:
    fmt.Println(a,b)
}

我有什么问题吗?或者如果没有形成新的聚合器渠道,这是不可能的?

最终目标是轻松等待两个频道准备就绪。

1 个答案:

答案 0 :(得分:0)

这是不可能的。

如果您需要等待两个频道都准备就绪,您可以使用:

a := <-c1
b := <-c2

The Go Playground

在某些用例中,您可以使用:

select {
case a, ok1 := <-c1:
    b, ok2 := <-c2
    if ok1 && ok2 {
        fmt.Println("C1 and C2 both Ready:", a, b)
    }
}

The Go Playground