在带有闭包的循环中生成 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
我有一个字符串列表,其中可以包含从 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