Golangで並列処理をまとめるsync.waitGropuとerrorgroup.Groupの使い方




どうも高妻です。Twitterでプログラミングのことや暗号通貨のことをつぶやいているのでよかったらフォローしてください。  

並列処理

Golangではgorutineを使って処理を並列化させます。この並列処理全てが終わるまで処理を待たせる方法にwaitGropuというものがあるのでその使い方を解説します。

waitGroup

wg.Add(1)で処理待ちをする並列処理の数をインクリメントしていきます。gorutineで何か処理をし、deferでwg.Doneを呼ぶとディクリメントします。全てのgorutineがwg.Done()を呼ぶとwg.Wait()以降の処理を実行することができます。

waitoGropuは並列処理を簡単に扱うことができますが、gorutine内のエラーハンドリングを行うにはchannelを使ってエラーは外に通知したりと追加で実装を行わないといけなく、処理も複雑になってしまいます。

そこでerrorgroupパッケージを使うと処理が簡単になります。

errorgroup

errorgroupは書き方が少し変わってしまいますが、並列化された全てのgorutineが終了するのを待つのは変わりません。

全てのgorutineを処理しきって、エラーがある場合はeg.Wait()からエラーがリターンされます。

errorgropuを使うとwaitGroupよりもエラーハンドリングが簡単になるので複雑になりそうだったらerrorgroupを使うのをおすすめします。

The following two tabs change content below.

高妻智一

2013年CyberAgent新卒入社 スマホゲームを作る子会社に所属し、サーバーサイドのエンジニアを担当。2年目の終わりから新規子会社の立ち上げに参加し、サーバーサイドのエンジニアリーダーとしてサービースのリリースから運用までを担当。 現在はTwitterなどSNSのテキスト解析を行うソーシャルメディア分析のサーバーサイドを開発中。言語はNode.js、Kotlinを使用。






よく読まれている関連記事はこちら



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です