我有一个字符串列表,其中可以包含 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/