Golang Error Handling Standards
Priority: P0 (CRITICAL)
Principles
- Errors are Values: Handle them like any other value.
- Handle Once: Log OR Return. Never Log AND Return (creates duplicate logs).
- Add Context: Don't just return
errbubble up. Wrap it with context:fmt.Errorf("failed to open file: %w", err). - Use Standard Lib: Go 1.13+
errorspackage (Is,As,Unwrap) is sufficient. Avoidpkg/errors(deprecated).
Guidelines
- Sentinel Errors: Expoted, fixed errors (
io.EOF,sql.ErrNoRows). Useerrors.Is(err, io.EOF). - Error Types: Structs implementing
error. Useerrors.As(err, &target). - Panic: Only for unrecoverable startup errors.
Anti-Patterns
- No bare return err: Wrap with
fmt.Errorf("context: %w", err)to preserve call chain. - No string error checks: Use
errors.Is/errors.As; string comparison is brittle. - No swallowed errors: Never assign errors to
_; always handle or propagate.