概要
で書いていなかったことの追加です。
環境
- golang 1.11.4
recoverしたあとのエラーハンドリングをどうするか
panicをrecoverしたものはいいものの、
func f() { defer func() { if r := recover(); r != nil { fmt.Println("Recovered in f", r) } }() panic("panic") }
このように単純にrecoverしてハイ終わり、としているとpanicを起こしたのに処理が正常系で進んでしまうという問題があります。
特にWebサーバとしてはpanicが起きたので500エラーとして返すべきです。
なのでpanicをerrorに変換して、後の処理にerrorを渡す必要があります。