Go defer: when arguments are evaluated, what order calls run in, and how results change
Go's defer evaluates arguments when the defer statement runs and calls deferred functions in reverse order just before the function returns. Here is why that lets them change named results.
godeferlanguage-specclosures