界面已本地化;技能介绍与说明文档按所选语言由 AI 自动翻译,代码、命令、路径和专业术语保留原文,以原作者文档为准。
探索技能
效率与协作 · SKILL.md

golang-error-handling

golang-error-handling

【效率与协作】Standards for error wrapping, checking, and definition in Golang. Use when wrapping errors, defining sentinel errors, or handling errors idiomatically in Go.

独立 GitHub 快照 · 自动分类 · 以原作者文档为准

技能说明

GitHub

name: golang-error-handling description: Standards for error wrapping, checking, and definition in Golang. Use when wrapping errors, defining sentinel errors, or handling errors idiomatically in Go. metadata: triggers: files: - 'fmt.Errorf' - 'errors.Is' - 'errors.As' keywords: - error wrapping - sentinel error - error handling

Golang Error Handling Standards

Priority: P0 (CRITICAL)

Principles

  • Errors Values: Handle them like any other value.
  • Handle Once: Log OR Return. Never Log AND Return (creates duplicate logs).
  • Add Context: Don't return err bubble up. Wrap it with context: fmt.Errorf("failed to open file: %w", err).
  • Use Standard Lib: Go 1.13+ errors package (Is, As, Unwrap) sufficient. Avoid pkg/errors (deprecated).

Guidelines

  • Sentinel Errors: Expoted, fixed errors (io.EOF, sql.ErrNoRows). Use errors.Is(err, io.EOF).
  • Error Types: Structs implementing error. Use errors.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 brittle.
  • No swallowed errors: Never assign errors to _; always handle or propagate.

References

我的收藏