Slide 1

Slide 1 text

goroutine で panic すると
 親プロセスをまきこんで落ちる
 uji @uji_rb


Slide 2

Slide 2 text

panic とは
 ● 回復不能だと判断された実行時のエラーを発生させる機構 ● panicが生じるとプロセスが止まる
 
 ● 組み込み関数のpanicを呼び出すと発生する

Slide 3

Slide 3 text

panic のハンドリング
 ● panic は defer + recover でハンドリングできる
 https://play.golang.org/p/sXEcmsxtV_Z


Slide 4

Slide 4 text

しかし...
 goroutine で panic が起こった場合
 親プロセスからはハンドリングできない
 


Slide 5

Slide 5 text

goroutine の panic
 ● goroutine 内で panic のハンドリングがされていないと
 親プロセスごと落ちる
 https://play.golang.org/p/HUY-sN8PK-X


Slide 6

Slide 6 text

ぶち当たった問題
 ● api サーバーで goroutine を使った処理が panic が起こすとプロ セスがまるごと落ちてしまう
 apiサーバー
 メインプロセス
 リクエスト
 プロセス
 リクエスト
 プロセス
 リクエスト
 プロセス
 リクエスト
 子プロセス
 リクエスト
 子プロセス


Slide 7

Slide 7 text

解決策
 
 ● goroutine 内ではなるべく panic が
 起こらないようにする
 (error によるハンドリングを徹底)
 ● goroutine 内で panic の恐れがある場合は
 recover 処理を忘れない
 →汎用的につかえる並列処理実行関数をつくった


Slide 8

Slide 8 text

参考
 ● プログラミング言語Go完全入門 https://docs.google.com/presentation/d/1HW3wG8J_Q2536Iu__7HGr_mhurHajC7IOGjCnn3kZmg/edit?usp=sharing