-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)
}
'go'スレッドの結果をメインプログラムに返信するには、チャンネルなどが必要です。それが現れて、あなたが戻ってきたすべてのエラーは無視され、メインスレッドは、これらのgoroutineが何をしても、そのビジネスを継続します。 – amalloy
実際には、シグネチャに戻り値のない関数から値を返すので、そのままコンパイルされません。 – Adrian