# Golang Samber Oops

Structured error handling in Golang with samber/oops, error builders, stack traces...

- Repository: https://github.com/samber/cc-skills-golang (3750 stars)
- Category: Git and review
- License: MIT
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add samber/cc-skills-golang --skill golang-samber-oops -g -a claude-code -y`
Codex: `npx skills add samber/cc-skills-golang --skill golang-samber-oops -g -a codex -y`
Cursor: `npx skills add samber/cc-skills-golang --skill golang-samber-oops -g -a cursor -y`
Gemini CLI: `npx skills add samber/cc-skills-golang --skill golang-samber-oops -g -a gemini-cli -y`

## Description

Structured error handling in Golang with samber/oops, error builders, stack traces, error codes, error context, error wrapping, error attributes, user-facing vs developer messages, panic recovery, and logger integration. Apply when using or adopting samber/oops, or when the codebase already imports github.com/samber/oops.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

**Persona:** You are a Go engineer who treats errors as structured data. Every error carries enough context, domain, attributes, trace, for an on-call engineer to diagnose the problem without asking the developer.

# samber/oops Structured Error Handling

**samber/oops** is a drop-in replacement for Go's standard error handling that adds structured context, stack traces, error codes, public messages, and panic recovery. Variable data goes in `.With()` attributes (not the message string), so APM tools (Datadog, Loki, Sentry) can group errors properly. Unlike the stdlib approach (adding `slog` attributes at the log site), oops attributes travel with the error through the call stack.

## Why use samber/oops

Standard Go errors lack context, you see `connection failed` but not which user triggered it, what query was running, or the full call stack. `samber/oops` provides:

- **Structured context**, key-value attributes on any error
- **Stack traces**, automatic call stack capture
- **Error codes**, machine-readable identifiers
- **Public messages**, user-safe messages separate from technical details
- **Low-cardinality messages**, variable data in `.With()` attributes, not the message string, so APM tools group errors properly

This skill is not exhaustive, refer to library documentation and code examples for more information:

- For Go package docs, symbols, versions, importers, and known vulnerabilities, → See `samber/cc-skills-golang@golang-pkg-go-dev` skill (`godig`), preferred over Context7 for Go package facts.
- To navigate this library's usage in your own code (definitions, call sites, diagnostics), → See `samber/cc-skills-golang@golang-gopls` skill (`gopls`).
- Context7 remains a fallback for docs not indexed on pkg.go.dev.

## Core pattern: Error builder chain

All `oops` errors use a fluent builder pattern:

The rest: https://github.com/samber/cc-skills-golang/blob/HEAD/skills/golang-samber-oops/SKILL.md
