goroutine で panic すると 親プロセスをまきこんで落ちる uji @uji_rb
View Slide
panic とは ● 回復不能だと判断された実行時のエラーを発生させる機構● panicが生じるとプロセスが止まる ● 組み込み関数のpanicを呼び出すと発生する
panic のハンドリング ● panic は defer + recover でハンドリングできる https://play.golang.org/p/sXEcmsxtV_Z
しかし... goroutine で panic が起こった場合 親プロセスからはハンドリングできない
goroutine の panic ● goroutine 内で panic のハンドリングがされていないと 親プロセスごと落ちる https://play.golang.org/p/HUY-sN8PK-X
ぶち当たった問題 ● api サーバーで goroutine を使った処理が panic が起こすとプロセスがまるごと落ちてしまう apiサーバー メインプロセス リクエスト プロセス リクエスト プロセス リクエスト プロセス リクエスト 子プロセス リクエスト 子プロセス
解決策 ● goroutine 内ではなるべく panic が 起こらないようにする (error によるハンドリングを徹底) ● goroutine 内で panic の恐れがある場合は recover 処理を忘れない →汎用的につかえる並列処理実行関数をつくった
参考 ● プログラミング言語Go完全入門https://docs.google.com/presentation/d/1HW3wG8J_Q2536Iu__7HGr_mhurHajC7IOGjCnn3kZmg/edit?usp=sharing