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

Spawning go routines in a loop with closure

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

为了最大限度地提高效率,我想为每个元素生成一个 go routine。 目标是returnfalse如果go例程函数里面的验证之一returnserr,如果没有returntrue err。因此,如果我们找到至少一个 err,我们就可以停止,因为我们已经知道它会 return false.

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

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