产卵以闭合的方式进入循环

时间:2017-07-21 18:24:46

标签: go channel goroutine

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

1 个答案:

答案 0 :(得分:0)

我写了一个可能对你有帮助的小功能。 请查看limited parallel operations