Last active
June 11, 2021 10:20
-
-
Save riandyrn/e5e8582f459a9ab50266960eca1476cf to your computer and use it in GitHub Desktop.
Golang - Defer Modify Returned Value
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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