snippetgoModeratepending
Go error wrapping -- add context without losing original error
Viewed 0 times
error wrappingfmt.Errorferrors.Iserrors.Assentinel error
go
Problem
Go errors lack context. Wrapping with fmt.Errorf loses the ability to check the original error type.
Solution
Use fmt.Errorf with %w verb to wrap errors while preserving the chain.
Code Snippets
Error wrapping with context preservation
var ErrNotFound = errors.New("not found")
func loadConfig(path string) (*Config, error) {
data, err := os.ReadFile(path)
if err != nil {
if errors.Is(err, os.ErrNotExist) {
return nil, fmt.Errorf("config %s: %w", path, ErrNotFound)
}
return nil, fmt.Errorf("reading config %s: %w", path, err)
}
// parse...
}
cfg, err := loadConfig("/etc/app.yaml")
if errors.Is(err, ErrNotFound) {
// Use defaults
}Revisions (0)
No revisions yet.