gpt4 book ai didi

select 语句中的 Golang channel 对分配

转载 作者:IT王子 更新时间:2023-10-29 02:22:51 25 4
gpt4 key购买 nike

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

在 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)
}

我是否做错了什么,或者如果不形成新的聚合器 channel 就不可能做到这一点?

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

最佳答案

这是不可能的。

如果你需要等待两个 channel 都准备好,你可以使用:

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

关于select 语句中的 Golang channel 对分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39154142/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com