deferでのrecoverのよくわからない挙動がよくわからない
deferで呼び出した関数でrecoverした場合にはpanicは発生しない。
https://play.golang.org/p/Z0oJ2I26wq8
package main import "fmt" func main() { defer recoverFunc() panic("Panic happens!") } func recoverFunc() { if err := recover(); err != nil { fmt.Printf("Recover: %v¥n", err) } }
しかし、deferで呼び出した関数からさらに呼び出した関数でrecoverした場合にはpanicが発生する(recoverが働かない)。
https://play.golang.org/p/FTqz736dHD9
package main import "fmt" func main() { defer deferredFunc() panic("Panic happens!") } func deferredFunc() { recoverFunc() } func recoverFunc() { if err := recover(); err != nil { fmt.Printf("Recover: %v¥n", err) } }
直感的に後者の場合でもpanicが発生しないかと思ったんだけどな。