There is also one additional caveat (not for your example, but just in case you stumble upon it): recover must be called *from a deferred function, *meaning "defer recover()" won't work either. You *always* need to wrap recover in a function and that function *always* needs to be directly defer'd.
On Wed, Mar 29, 2017 at 4:21 AM, T L <tapir....@gmail.com> wrote: > http://www.tapirgames.com/blog/golang-panic-recover-mechanism > > > On Wednesday, March 29, 2017 at 6:48:52 AM UTC+8, Stefan Engstrom wrote: >> >> Playing with recovery from a panic - this code does what i expect: ( >> https://play.golang.org/p/p5KvOYc1sx) >> >> package main >> >> import "fmt" >> >> func main() { >> defer func() { >> fmt.Println("main:",recover()) >> }() >> a() >> } >> >> func a() { >> panic("yikes") >> } >> >> Results in: >> >> main: yikes >> >> >> >> >> A simpler version without the closure doesn't catch the panic: ( >> https://play.golang.org/p/0ICqqdi2kL) >> >> package main >> >> import "fmt" >> >> func main() { >> defer fmt.Println("main:",recover()) >> a() >> } >> >> func a() { >> panic("yikes") >> } >> >> Produces: >> >> main: <nil> >> panic: yikes >> >> goroutine 1 [running]: >> main.a() >> /tmp/sandbox638763687/main.go:11 +0x60 >> main.main() >> /tmp/sandbox638763687/main.go:7 +0x100 >> >> >> I see the same behavior on linux/amd64 go1.8 >> >> Any idea why the second version fails to catch that panic? >> >> Thanks, >> >> Stefan >> >> -- > You received this message because you are subscribed to the Google Groups > "golang-nuts" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to golang-nuts+unsubscr...@googlegroups.com. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "golang-nuts" group. To unsubscribe from this group and stop receiving emails from it, send an email to golang-nuts+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.