You cannot handle errors inside a defer function to prevent the original function from returning them; defer only delays execution until the surrounding function returns. To handle errors, check them immediately after the call or use a wrapper function that captures the error and logs it before returning.
func process() error {
defer func() {
if r := recover(); r != nil {
// Handle panic, not error return
log.Println("Recovered from panic:", r)
}
}()
err := doWork()
if err != nil {
return err // Error propagates up
}
return nil
}
If you need to perform cleanup on error, do it before returning:
func process() error {
err := doWork()
if err != nil {
cleanup() // Run cleanup logic here
return err
}
return nil
}