I hate named returns too :)
Well, one case are good and should be allowed by linter I suppose.
func f() (retErr error) {
err := errors.New("foo")
defer func() {
if retErr == nil { // <-- analyse and replace returning error
retErr = errors.New("bar")
}
}()
return err
}