1

异步监听多个错误 - Go语言中文网 - Golang中文社区

 2 years ago
source link: https://studygolang.com/articles/35659
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

异步监听多个错误

reaperhero · 3天之前 · 548 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    

异步监听多个错误,等待他们完成并打印两个结果。此外,如果一个函数返回错误,我不想等待另一个函数,只是打印错误

func test(i int) (int, error) {
    if i > 2 {
        return 0, errors.New("test error")
    }
    return i + 5, nil
}

func test2(i int) (int, error) {
    if i > 3 {
        return 0, errors.New("test2 error")
    }
    return i + 7, nil
}

func main() {
    results := make(chan int, 2)
    errors := make(chan error, 2)
    var wg sync.WaitGroup
    wg.Add(1)
    go func() {
        defer wg.Done()
        result, err := test(3)
        if err != nil {
            errors <- err
            return
        }
        results <- result
    }()
    wg.Add(1)
    go func() {
        defer wg.Done()
        result, err := test2(3)
        if err != nil {
            errors <- err
            return
        }
        results <- result
    }()

    go func() {
        wg.Wait()
        close(results)
        close(errors)
    }()
    for err := range errors {
        println(err.Error())
        return

    }
    for res := range results {
        println("--------- ", res, " ------------")
    }
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK