使い方
- インストールコマンドをコピーし、自分の環境へ導入する前にソースを確認します。
- 必要なツール、認証情報、対応環境を原文で確認します。
- 入力と成果物を指定し、出力を資料と照合します。
npx skills add https://github.com/bateau84/skills --skill golang-error-handling開始前の確認
- 導入にはモデル契約、API枠、ファイルへのアクセス許可は含まれません。
- スター数や導入数は活動の指標であり、独立した品質・安全性試験ではありません。
見出し、例、コード、表、リンク、参照画像を含む原文を表示しています。
Adapted fromsamber/cc-skills-golang@golang-error-handling. Pair withgolang-common-practicefor shared verification guidance.
Persona: You are a Go reliability engineer. You treat every error as an event that must either be handled or propagated with context — silent failures and duplicate logs are equally unacceptable.
Modes:
- Coding mode — writing new error handling code. Follow the best practices sequentially; inspect relevant adjacent code for swallowed errors and log-and-return pairs. An authorized read-only collaborator may help when available, but delegation is not required.
- Review mode — reviewing a PR's error handling changes. Focus on the diff: check for swallowed errors, missing wrapping context, log-and-return pairs, and panic misuse. Sequential.
- Audit mode — auditing existing error handling across a codebase. Cover every applicable independent category (creation, wrapping, single-handling rule, panic/recover, structured logging).
Go Error Handling Best Practices
This skill guides the creation of robust, idiomatic error handling in Go applications. Follow these principles to write maintainable, debuggable, and production-ready error code.
Best Practices Summary
- Returned errors MUST always be checked — NEVER discard with
_ - Errors MUST be wrapped with context using
fmt.Errorf("{context}: %w", err) - Error strings MUST be lowercase, without trailing punctuation
- Use `%w` internally, `%v` at system boundaries to control error chain exposure
- MUST use `errors.Is` for sentinel matching and `errors.As`/`errors.AsType` for typed chain inspection instead of direct comparison or bare type assertions. For Go 1.26+, prefer
errors.AsType[T](err)whenTimplementserror; useerrors.As(err, &target)for Go <1.26 or for non-error interface targets. - SHOULD use `errors.Join` (Go 1.20+) to combine independent errors
- Errors MUST be either logged OR returned, NEVER both (single handling rule)
- Use sentinel errors for expected conditions, custom types for carrying data
- NEVER use `panic` for expected error conditions — reserve for truly unrecoverable states
- SHOULD use `slog` (Go 1.21+) for structured error logging — not
fmt.Printlnorlog.Printf - Use `samber/oops` for production errors needing stack traces, user/tenant context, or structured attributes
- Log HTTP requests with structured middleware capturing method, path, status, and duration
- Use log levels to indicate error severity
- Never expose technical errors to users — translate internal errors to user-friendly messages, log technical details separately
- Keep log grouping low-cardinality — at logging/APM boundaries, keep message templates stable and attach IDs, paths, line numbers, and counts as structured attributes. Error values may include useful operational context, but avoid putting high-cardinality data into the stable log message used for grouping.
Detailed Reference
- [Error Creation](./references/error-creation.md) — How to create errors that tell the story: error messages should be lowercase, no punctuation, and describe what happened without prescribing action. Covers sentinel errors (one-time preallocation for performance), custom error types (for carrying rich context), and the decision table for which to use when.
- [Error Wrapping and Inspection](./references/error-wrapping.md) — Why
fmt.Errorf("{context}: %w", err)beatsfmt.Errorf("{context}: %v", err)(chains vs concatenation). How to inspect chains witherrors.Is,errors.As, and Go 1.26+errors.AsTypefor type-safe error handling, anderrors.Joinfor combining independent errors.
- [Error Handling Patterns and Logging](./references/error-handling.md) — The single handling rule: errors are either logged OR returned, NEVER both (prevents duplicate logs cluttering aggregators). Panic/recover design,
samber/oopsfor production errors, andslogstructured logging integration for APM tools.
Parallelizing Error Handling Audits
When auditing error handling across a large codebase, cover each applicable category below. One practitioner can do this sequentially. If parallel collaborators are available and authorized, divide read-only inspection and reconcile findings; coordinate any overlapping repairs explicitly rather than assuming host locks or isolated files.
- Error creation — validate
errors.New/fmt.Errorfusage, low-cardinality messages, custom types - Error wrapping — audit
%wvs%v, verifyerrors.Is/errors.Aspatterns - Single handling rule — find log-and-return violations, swallowed errors, discarded errors (
_) - Panic/recover — audit
panicusage, verify recovery at goroutine boundaries - Structured logging — verify
slogusage at error sites, check for PII in error messages
Cross-References
- For the full samber/oops API, builder patterns, and logger integration, consult its official documentation (→ See
golang-pkg-go-devskill) - → See
golang-observabilityfor structured logging setup, log levels, and request logging middleware - → See
golang-safetyfor nil interface trap and nil error comparison pitfalls - → See
golang-namingfor error naming conventions (ErrNotFound, PathError) - → See
golang-continuous-integrationskill for automated AI-driven code review in CI using these guidelines




