在两个通道进行通信之前,是否有其他方法可以阻止案件? (为了满足单个选择条件)
例如:
package main
import (
"fmt"
)
func main() {
aChan, bChan := make(chan typea), make(chan typeb)
go myFunc(aChan, bChan, errChan /*...*/)
// This one works, but only blocks until the first communicates
select {
case a, b := <-aChan, <-bChan:
fmt.Printf("%v\n", a)
case a, b := <-aChan, <-bChan:
fmt.Printf("%v\n", b)
case err := <- errChan:
panic(err)
}
}
package main
import (
"fmt"
)
func main() {
aChan, bChan := make(chan typea), make(chan typeb)
go myFunc(aChan, bChan, errChan /*...*/)
// This one doesn't work
// Is there a way to block until both 'aChan' and 'bChan' communicate?
select {
case a, b := <-aChan, <-bChan:
fmt.Printf("%v, %v\n", a, b)
case err := <- errChan:
panic(err)
}
}
我要解决的问题是在goroutine中运行一堆数据库查询,并侦听多个结果通道进行通信,然后使用错误或结果加载服务器响应结构。
select {
case a := <- aChan:
fmt.Printf("a: %v\n", a)
case b := <- bChan:
fmt.Printf("b: %v\n", b)
case err := <- errChan:
panic(err)
}