有没有办法在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)
}
我有什么问题吗?或者如果没有形成新的聚合器渠道,这是不可能的?
最终目标是轻松等待两个频道准备就绪。
答案 0 :(得分:0)
这是不可能的。
如果您需要等待两个频道都准备就绪,您可以使用:
a := <-c1
b := <-c2
在某些用例中,您可以使用:
select {
case a, ok1 := <-c1:
b, ok2 := <-c2
if ok1 && ok2 {
fmt.Println("C1 and C2 both Ready:", a, b)
}
}