我有一个字符串列表,其中可以包含1到100,000之间的元素数。我想验证每个字符串,看看它们是否存储在数据库中,这需要调用网络。
为了最大限度地提高效率,我想为每个元素生成一个go例程。
如果go例程函数中的一个验证返回false
,则目标是返回err
,如果没有true
,则返回err
。因此,如果我们找到至少一个err
,我们可以停止,因为我们已经知道它将返回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)
}