Go Concurrency Patterns: Pipelines and cancellation - The Go Blog を読んでいて、なかなか理解するまで苦しんだので復習がてら自分でもコードを書いて確かめてみた。 お題 複数の入力データそれぞれに対して重い処理を行い、結果として返ってくる値をまとめて取得する。 途中でエラーが発生したら直ちに処理を中止して終了する。 コード いちばん簡単な例 エラーを考慮しない場合。 package main import ( "fmt" "log" "math/rand" "time" ) func init() { log.SetFlags(log.Lmicroseconds) rand.Seed(time.Now().UnixNano()) } func doSomething(id int) string { wait := rand.I