3 ms·
You can actually propagate errors from it. It's not pretty but it works: func Pants() (rerr error) { defer func() { if err := doStuff()
by shabbyrobe 8y ago
You can actually propagate errors from it. It's not pretty but it works:
func Pants() (rerr error) {
defer func() {
if err := doStuff(); err != nil && rerr == nil {
rerr = err
}
}()
// ...
return nil
}
I use this function all the time with `io.Closer` implementations:
func DeferClose(err *error, closer io.Closer) {
cerr := closer.Close()
if *err == nil && cerr != nil {
*err = cerr
}
}
func Pants() (rerr error) {
f, _ := os.Open(...)
defer errtools.DeferClose(&rerr, f)
// ...
return nil
}