概要 golang の goroutine と channel は非常に強力な機能で、並行処理へのハードルが下がり、手軽に使うことが出来ます。 本当にそうでしょうか。 ハードルは下がる… しかし、下手に扱うと panic, deadlock, race condition, goroutine leak… 怖いもの (嵌りポイント) が多いです。 panic まず、 defer + recover していない goroutine の中で panic が起こると、メイン goroutine を巻き込んで process が死にます。 package main import ( "fmt" ) func main() { defer recover() defer fmt.Println("finish") fmt.Println("main goroutine") ch := make(ch