Good error messages are:
Lowercase and without punctuation (they may be wrapped). Descriptive of what failed, not just that it failed. Including relevant values like filenames or IDs.
// Bad
errors.New("Error!")
// Good
fmt.Errorf("open %s: permission denied", filename)