Agent Skills: Go Expert — Gotchas & Decisions

Go/Golang backend expert. PROACTIVELY use when working with Go, Gin, Echo, Fiber frameworks. Triggers: golang, go, gin, echo, fiber

UncategorizedID: nguyenthienthanh/aura-frog/go-expert

Install this agent skill to your local

pnpm dlx add-skill https://github.com/nguyenthienthanh/aura-frog/tree/HEAD/aura-frog/skills/go-expert

Skill Files

Browse the full folder contents for go-expert.

Download Skill

Loading file tree…

aura-frog/skills/go-expert/SKILL.md

Skill Metadata

Name
go-expert
Description
"Go gotchas and decision criteria. Covers error handling patterns, concurrency pitfalls, and interface design."

AI-consumed reference. Optimized for Claude to read during execution. Human-readable explanation: see docs/architecture/HIERARCHICAL_PLANNING.md or docs/getting-started/ depending on topic.

Go Expert — Gotchas & Decisions

Use Context7 for Go framework docs.

Key Decisions

decisions[4]{choice,use_when}:
  Gin vs Echo vs Fiber,"Gin: most popular/stable. Echo: cleaner API. Fiber: highest perf (Express-like)"
  Interface location,"Define in CONSUMER package not provider. Accept interfaces return structs"
  Channel vs Mutex,"Channel for communication between goroutines. Mutex for protecting shared memory"
  Table-driven vs subtests,"Table-driven for input variations. Subtests (t.Run) for distinct scenarios"

Gotchas

  • err != nil check EVERY error return — never ignore with _
  • %w for wrapping errors (unwrappable), %v for formatting only (not unwrappable)
  • Goroutine leak: always ensure goroutines can exit (context cancellation, done channels)
  • defer evaluates args immediately but executes LIFO — defer f.Close() captures current f
  • Range loop variable reuse (pre-Go 1.22): for _, v := range items { go func() { use(v) }() } captures same v. Fixed in Go 1.22+
  • nil slice vs empty slice: var s []int (nil, marshals to null) vs s := []int{} (empty, marshals to [])
  • context.Background() for top-level, context.TODO() as placeholder. Always pass context as first param
  • Race conditions: use -race flag in tests. go test -race ./...
  • sync.WaitGroup: Add() before goroutine launch, not inside it