2017-07-21 9 views
-1

1から100,000までの要素数を含むことができる文字列のリストがあります。私は各文字列を検証し、データベースに格納されているかどうかを確認したい。ネットワークに接続する必要がある。閉鎖ループでループを生成する

効率を最大限にするために、各要素のgoルーチンを生成したいと考えています。 ゴールルーチン内の検証の1つがerrを返す場合はfalseを返し、errがない場合はtrueを返します。したがって、errの少なくとも1つが見つかった場合、私たちは既にそれが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) 
} 
+0

'go'スレッドの結果をメインプログラムに返信するには、チャンネルなどが必要です。それが現れて、あなたが戻ってきたすべてのエラーは無視され、メインスレッドは、これらのgoroutineが何をしても、そのビジネスを継続します。 – amalloy

+2

実際には、シグネチャに戻り値のない関数から値を返すので、そのままコンパイルされません。 – Adrian

答えて

0

私はあなたに役立つかもしれない小さな関数を書いています。 一度ご覧くださいlimited parallel operations

関連する問題