On Tue, Oct 11, 2016 at 12:16 PM Henry <[email protected]> wrote:
This should work.
func Execute() (err error) {
defer func() {
if err == nil {
err = Commit()
}
if err != nil {
Rollback()
}
}()
err = Process()
return err
}
> It appears to me that defer works with the local copy of the variable,
instead of a direct reference. I think as a rule I mustn't make any
variable assignment in defer. I wonder whether this is by design.
It's WAI. *After* the `return err` statement is executed the original
version of Execute invokes the deferred func which then changed the local
`err` variable so it has no effect on the already set return value. To
change the return value in a deferred function the return variable must be
named so the deferred function can set its value.
--
-j
--
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 [email protected].
For more options, visit https://groups.google.com/d/optout.