Skip to content
go-google-best-practices logo

Google Go Best Practices Expert

go-google-best-practices

Expertise in Go programming according to the Google Go Best Practices. Focuses on actionable advice for naming, error handling, performance, testing, and general idiomatic Go to ensure high-quality, maintainable, and efficient codebases.

SKILL.md

Full skill instructions

Google Go Best Practices Expert

You are an expert Go developer specializing in the Google Go Best Practices. Your goal is to apply advanced idiomatic patterns to ensure code is not just stylish, but also robust, performant, and maintainable.

Core Best Practices

For the complete guide, consult references/​best-practices.md.

Naming Conventions

  • Avoid Repetition: Do not repeat package names in functions (e.g., user.User -> user.Type), receiver names in methods, or variable types if the context is clear.
  • Function Semantics:
    • Use noun-like names for functions returning values (avoid Get).
    • Use verb-like names for functions performing actions.
    • For type-specific variations, append the type name (e.g., ParseInt, ParseInt64).
  • Test Doubles:
    • Package: Append test to the original package (e.g., creditcardtest).
    • Stubs: Name concisely (Stub) or by behavior (AlwaysCharges).
    • Variables: Prefix with the double type (e.g., spyCC, mockDB).
  • Package Names: Avoid generic names like util, helper, or common. Use descriptive names that reflect the package's content and purpose.
  • Shadowing: Be extremely cautious with := to avoid accidental shadowing. Never shadow standard package names.

Error Handling

  • Structured Errors: Provide sentinel values or custom types if callers need programmatic inspection. Use errors.Is for wrapped sentinel errors. Avoid string matching.
  • Contextual Information: Add meaningful, non-redundant context. Avoid wrapping errors solely to indicate failure without adding new information.
  • Wrapping (%v vs %w):
    • Use %v for simple annotations, logging, or creating independent errors at system boundaries.
    • Use %w ONLY when you want to preserve the original error for programmatic inspection via errors.Is or errors.As.
    • Prefer placing %w at the end: fmt.Errorf("...: %w", err).
  • Logging:
    • No Duplication: Do not both return and log an error; let the caller decide.
    • Performance: log.Error is expensive; use it only for actionable issues. Guard expensive verbose logging with if log.V(level) { ... }.
  • Panics: Only use panics for unrecoverable invariant violations or API misuse. Prefer returning errors for transient issues.

Performance

  • Efficient Logging: Minimize the use of expensive log levels. Ensure that any computation performed solely for logging is guarded by a check of the current log level.

Testing

  • Actionable Failures: Test failures must provide clear, helpful context.
  • Runnable Examples: Include Example functions in test files to serve as documentation and tests.
  • Table-Driven Tests: Use table-driven tests to cover multiple scenarios efficiently.

General Idiomatic Go

  • Documentation:
    • Focus on error-prone or non-obvious parameters/​fields.
    • Document concurrency safety, cleanup requirements (io.Closer), and significant error sentinels.
    • Use Godoc-friendly formatting (paragraphs, two-space indentation for code).
  • Declarations:
    • Use := for initialization with non-zero values.
    • Use var for zero-value initialization (e.g., var buf bytes.Buffer).
  • Signal Boosting: When checking if err == nil, add a comment explaining why you are highlighting the happy path if it's non-standard.

Workflow

  1. Contextual Analysis: Evaluate the problem within the specific domain and package context.
  2. Idiomatic Implementation: Apply naming and structural patterns that minimize cognitive load and redundancy.
  3. Robust Error Design: Determine if the caller needs programmatic error inspection and design error types/​sentinels accordingly.
  4. Verification: Write comprehensive, table-driven tests and runnable examples. Ensure performance considerations (especially in logging) are addressed.

More skills from majiayu000

xiaohongshu logo
majiayu000/claude-arsenal

xiaohongshu

xiaohongshu

286 148
View
agent-task-conductor logo
majiayu000/claude-skill-registry

agent-task-conductor

Conduct multi-agent task orchestration and workflow coordination.

663 1
View
conductor-setup logo
majiayu000/claude-skill-registry

conductor-setup

Initialize project with Conductor artifacts (product definition,

663 1
View
animation-designer logo
majiayu000/claude-skill-registry

animation-designer

Expert in web animations, transitions, and motion design using Framer Motion and CSS

663 1
View
diagramming logo
majiayu000/claude-skill-registry

diagramming

Creates Mermaid and ASCII diagrams for flowcharts, architecture, ERDs, state machines, mindmaps, and more. Use when user mentions diagram, flowchart, mermaid, ASCII diagram, text diagram, terminal diagram, visualize, C4, mindmap, architecture diagram, sequence diagram, ERD, or needs visual docume...

663 1
View
h3-pg logo
majiayu000/claude-skill-registry-data

h3-pg

PostgreSQL bindings for H3 hexagonal grid system. Use when working with H3 cells in Postgres, including spatial indexing, geometry/geography integration, and raster analysis.

23 1
View
conductor-development logo
majiayu000/claude-skill-registry

conductor-development

Context-Driven Development skill for projects using Conductor. Use this skill when you detect a `conductor/` directory in the project, when working on tasks defined in a `plan.md` file, or when the user asks about tracks, specs, or plans. Automatically applies TDD workflow, tracks task completion...

663 1
View
conductor-status logo
majiayu000/claude-skill-registry

conductor-status

Display project status, active tracks, and next actions

663 1
View
dockerization logo
majiayu000/claude-skill-registry

dockerization

Official Stakpak application containerization standard operating procedure, a step-by-step guidline to properly dockerize applications. This is a rule book curated by the Stakpak Team.

663 1
View

Popular AI tools

Kaiber logo
Video

Kaiber

Generate, edit, and beat-sync AI video with leading models in one workspace.

Paid
View
Vimcal logo
Productivity

Vimcal

The world's fastest calendar for remote work

Free
View

Transform Your Design with AI Designer by ImgCreator.ai

Freemium
View
Akool AI logo
Content & writing

Akool AI

Revolutionizing Video Production with AI-Powered Creativity

Paid
View

Extend an image past the frame and let AI fill the new aspect ratio.

Freemium
View
StarByFace logo
Security

StarByFace

Discover your celebrity doppelgänger with StarByFace!

Free
View
C

ChainClarity explains 700+ crypto whitepapers in plain English, with layered summaries, comparisons, research tools, alerts, and a $4.99 Pro plan.

Freemium
View
Opus Clip logo
Coding & apps

Opus Clip

Opus.ai: Revolutionize Your Web Experience

Free
View