Repolode
sourcegraph

sourcegraph/conc

wait group、上限付きプール、順序付きストリーム、panicの伝播により、構造化並行処理をより安全かつシンプルにするGoライブラリ。

スター
10,435
フォーク
366
未解決の Issue
33
最終コミット
2 か月前

これは何?

concは、よく使われる並行処理パターンをスコープ付きの読みやすいAPIで提供するGoパッケージです。すべてのgoroutineはconc.WaitGroupが管理するため、放置せず、所有者が完了を待つ責任を負います。

起動したgoroutine内でpanicが発生すると、パッケージがそれを捕捉し、子goroutineのスタックトレースを付けてWait()を呼び出したgoroutineで再度panicを発生させます。これにより、通常のgo文で必要となるrecoverしてエラーを転送する定型コードを避けられます。

wait groupに加えて、concは上限付きのworker pool、結果やエラーを収集するpool、contextをキャンセルするpool、順序付きストリームプロセッサ、スライス向けの並行処理用MapおよびForEachヘルパーを提供します。

主な機能

  • 01起動したgoroutineを管理し、完了を待つWaitGroup。
  • 02子goroutine内のpanicを、子のスタックトレースとともにWait()で再発生させます。
  • 03WithMaxGoroutinesで設定できる、goroutine数に上限のあるpool。
  • 04結果やエラーを収集するpool。最初のエラー発生時にcontextをキャンセルする設定も可能です。
  • 05タスクを並行実行しつつ、コールバックを逐次実行する順序付きストリーム処理。
  • 06スライスに対する並行処理用のiter.Mapとiter.ForEach。

ユースケース

  • goroutine内のpanicが気付かれないままプロセスをクラッシュさせないよう、サービスでsync.WaitGroupを置き換える。
  • goroutineの同時実行数に固定の上限を設けて、一連のタスクを実行する。
  • worker loopを自前で書かずに、スライスを並行してmap処理または反復処理する。
  • 出力順を保ちながら、順序付きストリームを並行処理する。

クイックスタート

  1. 1

    ライブラリをGoモジュールに追加します

    go get github.com/sourcegraph/conc

使う前に知っておきたいこと

  • READMEによると、このパッケージは1.0未満のため、1.0になる前に軽微な破壊的変更が行われる可能性があります。

トピック

よくある質問

conc とは?
wait group、上限付きプール、順序付きストリーム、panicの伝播により、構造化並行処理をより安全かつシンプルにするGoライブラリ。 concは、よく使われる並行処理パターンをスコープ付きの読みやすいAPIで提供するGoパッケージです。すべてのgoroutineはconc.WaitGroupが管理するため、放置せず、所有者が完了を待つ責任を負います。
conc は無料で使えますか?ライセンスは?
conc は MIT ライセンスのオープンソースです。商用製品で使う前にライセンス条件を確認してください。
conc は今もメンテナンスされていますか?
半年以内に更新あり。conc の最終コミットは 2026年9月1日 です。
conc は何に使えますか?
goroutine内のpanicが気付かれないままプロセスをクラッシュさせないよう、サービスでsync.WaitGroupを置き換える。 goroutineの同時実行数に固定の上限を設けて、一連のタスクを実行する。 worker loopを自前で書かずに、スライスを並行してmap処理または反復処理する。 出力順を保ちながら、順序付きストリームを並行処理する。
conc のインストール方法は?
ライブラリをGoモジュールに追加します: go get github.com/sourcegraph/conc
conc はどこで入手できますか?
ソースコードとインストール手順は GitHub にあります:https://github.com/sourcegraph/conc

概要はプロジェクトの README をもとに AI が生成しています。GitHub の数値は毎日更新されます。

関連プロジェクト