概要 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
![goroutine と並行処理の怖い話 · ww24.jp](https://cdn-ak-scissors.b.st-hatena.com/image/square/4c41f79cadd1738ad9831e1ea41b2ef66b5be7d1/height=288;version=1;width=512/https%3A%2F%2Fww24.jp%2Fimages%2Fpost%2F2018%2F03%2Fgoroutine.jpg)