Skip to content

Instantly share code, notes, and snippets.

@riandyrn
Last active June 11, 2021 10:20
Show Gist options
  • Save riandyrn/e5e8582f459a9ab50266960eca1476cf to your computer and use it in GitHub Desktop.
Save riandyrn/e5e8582f459a9ab50266960eca1476cf to your computer and use it in GitHub Desktop.
Golang - Defer Modify Returned Value
package main
import (
"errors"
"log"
)
func main() {
err := funWithoutNamedReturn()
log.Printf("error received from func WITHOUT named return: %+v", err) // the err will be nil
err = funWithNamedReturn()
log.Printf("error received from func WITH named return: %+v", err) // the err will not nil
}
func funWithoutNamedReturn() error {
err := WriteFile()
if err != nil {
return err
}
defer func() {
cerr := Close()
if err == nil {
err = cerr
}
}()
return err
}
func funWithNamedReturn() (err error) {
err = WriteFile()
if err != nil {
return err
}
defer func() {
cerr := Close()
if err == nil {
err = cerr
}
}()
return err
}
func WriteFile() error {
return nil
}
func Close() error {
return errors.New("this is coming from function Close()")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment