go - 在带有闭包的循环中生成 go 例程

标签 go channel goroutine

我有一个字符串列表,其中可以包含 1 到 100,000 之间的元素数。我想验证每个字符串,看看它们是否存储在数据库中,这需要调用网络。

为了最大限度地提高效率,我想为每个元素生成一个 go routine。 目标是如果 go 例程函数内部的验证之一返回 err,则返回 false,如果没有 err,则返回 true 。因此,如果我们发现至少一个 err,我们就可以停止,因为我们已经知道它将返回 false

这是基本思路,下面的函数是我目前一直在考虑使用的结构。我想知道是否有更好的方法(也许使用 channel ?)。

for _, id := range userIdList {
    go func(id string){
        user, err := verifyId(id)
        if err != nil {
            return err
        }
        // ...
        // few more calls to other APIs for verifications
        if err != nil {
            return err
        }
    }(id)
}

最佳答案

我写了一个小函数,可能对你有帮助。 请看limited parallel operations

关于go - 在带有闭包的循环中生成 go 例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45244386/

相关文章:

golang : can't execute t. 执行

go - 如何优雅地关闭 golang 服务器?

Go range over channel 死锁问题,我应该关闭 channel 吗?

go - 卡在 golang 中的 channel

goroutines 死锁,需要一些解释

go - sync.WaitGroup 的示例是否正确?

string - Golang 在字符串 slice 中追加字符串

在 %PATH% 中找不到 GCC

arrays - 如何在 Go 中清除和重用数组(不是 slice )?

java - 将缓冲区写入 Java channel : Thread-safe or not?