选择语句中的 Golang 通道对分配

有没有办法在 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)

}

有什么我做错了,或者如果不形成新的聚合器渠道就不可能吗?


最终目标是轻松等待两个通道都准备好。


胡子哥哥
浏览 121回答 1
1回答

回首忆惘然

这是不可能的。如果您需要等待两个通道都准备好,您可以使用:a := <-c1b := <-c2在某些用例中,您可以使用:select {case a, ok1 := <-c1:&nbsp; &nbsp; b, ok2 := <-c2&nbsp; &nbsp; if ok1 && ok2 {&nbsp; &nbsp; &nbsp; &nbsp; fmt.Println("C1 and C2 both Ready:", a, b)&nbsp; &nbsp; }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go