表題のような処理はたいへん良くあって、似たようなものをみなさん書かれていると思う。自分のコードでも何度か出てきたので、ParallelGenerateという関数に抽象化しつつまとめてみたというメモ的エントリーです。 ParallelGenerate ParallelGenerateは値の生成手段の列を受け取って、値を並列に生成し、結果の列を受け取るためのチャンネルを返す、汎用的な関数。 import ( "sync" ) type Generator interface { Generate() (interface{}, error) } func ParallelGenerate(generators []interface{}) chan []interface{} { generated := make(chan interface{}) finish := make(chan b