Lets say you have a simple function as so:
func create(path string) error {
if err := ioutil.WriteFile(path, []byte{}, 0666); err != nil {
return err
}
if err := os.Chmod(path, 0666); err != nil {
_ = os.Remove(path)
return err
}
return nil
}
I don't like ignoring the error out of Remove(). But I also don't want to swamp the error out of Chmod() and I don't want to leave the file since we didn't create() it successfully.
This is a simple example, and perhaps the function could be written differently to avoid this, but there are more complex situations that come up and this combining of errors I haven't seen mentioned in the golang community, so whats the idiom?
The solution would be to store the error from Remove in a separate variable, and combine them with fmt.Errorf:
if err := os.Chmod(path, 0666); err != nil {
if e2 := os.Remove(path); e2 != nil {
return fmt.Errorf("error changing permissions (%v); error deleting file (%v)", err, e2)
}
return err
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With