替代在选择情况下等待多个通道的golang

问题描述 投票:-2回答:1

在两个通道进行通信之前,是否有其他方法可以阻止案件? (为了满足单个选择条件)

例如:

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中运行一堆数据库查询,并侦听多个结果通道进行通信,然后使用错误或结果加载服务器响应结构。

go concurrency parallel-processing goroutine
1个回答
0
投票
    select {
    case a := <- aChan:
        fmt.Printf("a: %v\n", a)
    case b := <- bChan:
        fmt.Printf("b: %v\n", b)
    case err := <- errChan:
        panic(err)
    }
© www.soinside.com 2019 - 2024. All rights reserved.