GO

go-backend-best-practices

Implements standard project layout and Uber-style Go patterns for consistent, maintainable backend code.

Install

mkdir -p .claude/skills/go-backend-best-practices && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16569" && unzip -o skill.zip -d .claude/skills/go-backend-best-practices && rm skill.zip

Installs to .claude/skills/go-backend-best-practices

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Go backend patterns from Uber style and standard layout
55 charsno explicit “when” trigger
Intermediate

Key capabilities

  • Apply standard project layout for Go backends
  • Implement Uber-style error handling
  • Structure HTTP servers with handler, service, and repository layers
  • Configure applications with environment variables

How it works

This skill provides rules and patterns for Go backend development, covering project structure, error handling (wrapping with context, sentinel errors), concurrency (WaitGroup, context.Context), HTTP server architecture (DI, error mapping), and configuration (environment variables, validation).

Inputs & outputs

You give it
Go backend code or a request to apply Go backend best practices
You get back
Go backend code adhering to Uber style and standard layout, with improved error handling, concurrency, and dependency injection

When to use go-backend-best-practices

  • Structuring new Go backend projects
  • Refactoring service logic to use dependency injection
  • Standardizing error handling across microservices

About this skill

Purpose

Apply Go backend patterns for building production-ready services.

Rules

1. Project Structure (Standard Layout)

layout: "cmd/{server/main.go} + internal/{handler/,service/,repository/,model/} + pkg/{shared/} + api/{openapi.yaml} + configs/ + scripts/"

directories:
  cmd: Main applications (one per binary)
  internal: Private application code
  pkg: Library code safe for external use
  api: API definitions (OpenAPI, protobuf)
  configs: Configuration files
  scripts: Build and CI scripts

Reference: guides/go-backend/project-layout.md

2. Error Handling (Uber Style)

principles:
  - Wrap errors with context using %w
  - Handle errors once (don't log AND return)
  - Use sentinel errors for specific conditions
  - Name error variables with Err prefix

patterns:
  sentinel: "var ErrNotFound = errors.New(\"not found\")"
  wrapping: "fmt.Errorf(\"getUser %s: %w\", id, err)"
  checking: "errors.Is(err, ErrNotFound)"

Reference: guides/go-backend/uber-style.md

3. Concurrency (Uber Style)

channels:
  size: "Use 0 (unbuffered) or 1 only"
  larger: "Requires careful review"

goroutines:
  never: fire-and-forget
  always: wait for completion or manage lifecycle
  patterns: "sync.WaitGroup + error channel for parallel work; context.Context for cancellation"

Reference: guides/go-backend/uber-style.md

4. HTTP Server

structure:
  handler: HTTP layer (request/response)
  service: Business logic
  repository: Data access

patterns:
  dependency_injection: "Handler struct with service field, constructor NewXxxHandler()"
  router: "chi.NewRouter() with middleware (Logger, Recoverer) and versioned routes"
  error_mapping: "errors.Is() to map domain errors to HTTP status codes"

Reference: guides/go-backend/uber-style.md

5. Dependency Injection

approach: constructor injection
avoid: global variables
pattern: "Struct with dependencies as fields, New* constructor functions, wire up in main()"

Reference: guides/go-backend/uber-style.md

6. Configuration

approach:
  - Use environment variables
  - Validate at startup
  - Group related settings
pattern: "Config struct with nested typed configs, env struct tags, Parse at startup"

Reference: guides/go-backend/uber-style.md

7. Testing

patterns:
  table_driven: for comprehensive coverage
  interfaces: for mocking
  parallel: for speed
  tools: "gomock for mocks, cmp.Diff for assertions"

Reference: guides/go-backend/uber-style.md

8. Performance (Uber Style)

guidelines:
  - Use strconv over fmt for conversions
  - Pre-allocate slices with known capacity
  - Avoid repeated string-to-byte conversions
  - Copy slices/maps at boundaries

Reference: guides/go-backend/uber-style.md

Application

When writing Go backend code:

  1. Always use standard project layout
  2. Always wrap errors with context
  3. Never fire-and-forget goroutines
  4. Use constructor injection
  5. Use table-driven tests
  6. Handle errors once
  7. Copy data at boundaries
  8. Validate config at startup

When not to use it

  • Using global variables for dependency management
  • Fire-and-forget goroutines
  • Logging and returning errors simultaneously

Limitations

  • Does not allow fire-and-forget goroutines
  • Does not allow logging and returning errors simultaneously
  • Does not allow global variables for dependency management

How it compares

This skill enforces specific, well-defined patterns and rules for Go backend development, ensuring consistency and maintainability across projects, unlike an ad-hoc approach.

Compared to similar skills

go-backend-best-practices side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
go-backend-best-practices (this skill)04moNo flagsIntermediate
architecture-patterns552moNo flagsAdvanced
workflow-orchestration-patterns102moNo flagsAdvanced
backend-expert01moNo flagsAdvanced

Try saying

Example prompts that trigger this skill in your AI assistant.

You might also like

architecture-patterns

wshobson

Implement proven backend architecture patterns including Clean Architecture, Hexagonal Architecture, and Domain-Driven Design. Use when architecting complex backend systems or refactoring existing applications for better maintainability.

55214

workflow-orchestration-patterns

wshobson

Design durable workflows with Temporal for distributed systems. Covers workflow vs activity separation, saga patterns, state management, and determinism constraints. Use when building long-running processes, distributed transactions, or microservice orchestration.

10117

backend-expert

FlavioProgramador

Advanced backend engineering guidelines focusing on clean architecture, API standards, performance, asynchronous jobs, and clean code principles.

00

go-usecases

silvioubaldino

Write or modify business logic in the clean-arch usecase layer (internal/usecase/*.go). Use when adding/editing a usecase method, defining a new Repository/Gateway/UseCase dependency interface, wiring a transaction, or wrapping errors from repositories/external calls. Enforces interface-at-point-of-

00

crud-di

ArtisanCloud

PowerX CRUD 依赖注入规则(Deps 单入口、构造注入、跨传输复用)。

00

go-dev-guidelines

jumppad-labs

This skill should be used when writing, refactoring, or testing Go code. It provides idiomatic Go development patterns, TDD-based workflows, project structure conventions, and testing best practices using testify/require and mockery. Activate this skill when creating new Go features, services, packages, tests, or when setting up new Go projects.

1495

Search skills

Search the agent skills registry