Goではgoroutineを使うことで並行処理をとても簡単に実行できるが、複数goroutineとの同期が難しい。 そこで、複数走らせたgoroutineのメッセージを用いた同期方法について考えてみた。 以下のように、複数のチャネルからのメッセージを受信する必要がある時、どうやって各goroutineからのメッセージを、同時に、最後まで、受信すればいいか? func f(msg string, n int) chan string { ch := make(chan string) go func() { for i:=0; i<n; i++ { ch <- msg + " please!" } close(ch) }() return ch } func main() { ch1 := f("beer", 4) ch2 := f("juice", 2) ch3 := f("water",