When I open a socket connection, I immediately put the socket.Close() logic in a defer function after the opening of the socket. However, what if the socket.Close() would cause another panic? Should I always nest another defer/recover inside the outer defer to prevent my program from crashing? Something like this: http://play.golang.org/p/GnEMQS-0jj
Thanks, Elgs
Generally you don't need to worry much about panics. They usually represent two classes of errors: developer mistakes (nil references, array out of bounds) and system level errors you probably can't do much about (like running out of memory).
As others said
socket.Close
will not panic, rather it returns an error. If you do:The error is discarded and you don't need to do anything else.
But suppose you did want to recover from a panic. If you're recovery handler is deferred first then you don't need to do anything else:
Deferred functions are run in reverse order: http://golang.org/ref/spec#Defer_statements