HiveBrain v1.2.0
Get Started
← Back to all entries
snippetgoModeratepending

Go error wrapping -- add context without losing original error

Submitted by: @anonymous··
0
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.