
golang-how-to
Golang skills orchestrator — always active on any Golang coding, review, debug, or setup task. Reads the task context and loads the most relevant skills from samber/cc-skills-golang, often multiple at once: writing a gRPC service loads golang-grpc + golang-testing + golang-error-handling; debugging a panic loads golang-troubleshooting + golang-safety; auditing security loads golang-security + golang-lint + golang-safety. Also: disambiguates competing clusters when two skills seem to overlap (performance vs benchmark vs troubleshooting, samber/lo vs mo vs ro, DI cluster, safety vs security), and configures the project's agent-config file (CLAUDE.md, AGENTS.md, GEMINI.md, Cursor rules, or Copilot instructions) to force-trigger skills in a project (/golang-how-to configure).
- Installs
- 36.5K
- Last 24h
- +161
- Trending rank
- #1433
- Security
- Warn
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/samber/cc-skills-golang --skill golang-how-to- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads golang-how-to automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
Security audits
Independent scans of the skill's instructions and bundled files.
SKILL.md
The instructions your agent reads when the skill is triggered.
Persona: You are a Go skills orchestrator. For every Go task, identify all relevant skills and load them together — a task rarely belongs to a single skill.
Modes:
- Orchestrate — for any Go coding, review, debug, or setup task, load the primary skill plus all applicable secondary skills simultaneously.
- Disambiguate — when two skills seem to overlap, show the boundary table. See disambiguation.md.
- Configure — write the always-load directive for
golang-how-toitself, plus an optional## Required Go skillsblock, to the project's agent-config file (CLAUDE.md, AGENTS.md, or equivalent). Follow project-config.md.
Questions: In Configure mode, ask the user through the environment's question tool — never as plain-text prose. One question at a time, wait for the answer. If the environment has no question tool, ask in prose with the same options.
Dependencies: gopls — go install golang.org/x/tools/gopls@latest; Claude Code's built-in LSP tool also needs ENABLE_LSP_TOOL=1 and a Go language server wired (see Code navigation with gopls).
Skill loading
For each task, load the primary skill and all applicable secondary skills at the same time. Do not wait — load them together at the start.
| Intent | Primary | Also load |
|---|---|---|
| Design an API, choose a pattern | golang-design-patterns | golang-structs-interfaces, golang-naming |
| Name a type, function, or package | golang-naming | golang-code-style |
| Handle errors idiomatically | golang-error-handling | golang-safety (nil-heavy code) |
| Write goroutines, channels, sync | golang-concurrency | golang-context (if cancellation) |
| Pass deadlines / cancel operations | golang-context | golang-concurrency (if goroutines) |
| Design structs, embed, use interfaces | golang-structs-interfaces | golang-design-patterns |
| Database queries and transactions | golang-database | golang-error-handling, golang-security |
| Build a gRPC service | golang-grpc | golang-testing, golang-error-handling |
| Build a GraphQL API | golang-graphql | golang-testing, golang-error-handling |
| Build a CLI command tree | golang-spf13-cobra | golang-cli, golang-spf13-viper (if config) |
| Layer config from flags/env/file | golang-spf13-viper | golang-spf13-cobra |
| Write tests | golang-testing | golang-stretchr-testify (if using testify) |
| Apply optimization patterns | golang-performance | golang-benchmark (measure first) |
| Measure with pprof / benchstat | golang-benchmark | golang-performance (fix), golang-troubleshooting (root cause) |
| Debug a panic or unexpected behavior | golang-troubleshooting | golang-safety, golang-benchmark (if perf-related) |
| Monitor in production | golang-observability | golang-performance (if SLO breach) |
| Audit security vulnerabilities | golang-security | golang-safety, golang-lint |
| Review formatting and style | golang-code-style | golang-naming, golang-lint |
| Refactor or restructure existing code | golang-refactoring | golang-naming, golang-code-style, golang-project-layout |
| Configure golangci-lint | golang-lint | golang-code-style |
| Write godoc / README / CHANGELOG | golang-documentation | golang-naming |
| Set up a new project structure | golang-project-layout | golang-design-patterns, golang-dependency-injection, golang-lint |
| Set up CI/CD pipeline | golang-continuous-integration | golang-lint, golang-security |
| Choose a library | golang-popular-libraries | relevant library-specific skill |
| Look up a package's docs, versions, importers, or CVEs | golang-pkg-go-dev | golang-dependency-management |
| Navigate, diagnose, or refactor local code (definitions, references, rename) | golang-gopls | — |
| Adopt new Go language features | golang-modernize | golang-lint |
| Use samber/lo (slice/map helpers) | golang-samber-lo | golang-data-structures, golang-performance |
| Use samber/oops (structured errors) | golang-samber-oops | golang-error-handling |
| Use log/slog | golang-samber-slog | golang-observability, golang-error-handling |
| Use dependency injection | golang-dependency-injection | golang-google-wire or golang-uber-dig or golang-uber-fx or golang-samber-do |
All skill identifiers above are short forms of samber/cc-skills-golang@<name>.
Code navigation with gopls
gopls gives semantic code intelligence for Go — go-to-definition, find references, diagnostics, package API, symbol search, refactoring. → See samber/cc-skills-golang@golang-gopls skill for the three ways to reach it (its own MCP server, the native LSP tool, and its CLI), the full capability matrix, and efficient read/edit workflows.
gopls only reasons about code that is present and resolvable in the local build: your workspace plus every dependency exactly as pinned in go.sum (including replace directives). For any fact that isn't tied to your local build — version history, licenses, ecosystem-wide importers, a package you haven't added yet — use golang-pkg-go-dev (godig). See the godig vs gopls vs Context7 vs govulncheck section below for the full boundary.
godig vs gopls vs Context7 vs govulncheck
Four tools can answer "is this dependency OK to use," and they don't overlap as much as they look:
- Context7 is a general-purpose, cross-language documentation fetcher — useful when no more specific source exists. For a Go package or module,
godigis almost always the better choice: it pulls structured, Go-specific data straight from pkg.go.dev — exact versions, exported symbols with signatures, runnable examples,imported-by, and known vulnerabilities — rather than Context7's generic scraped/curated docs, which don't expose that structure and can lag or miss lesser-known Go modules. Reach for Context7 only when a dependency's documentation genuinely doesn't exist or isn't indexed on pkg.go.dev. godiganswers questions about the published ecosystem: any Go package or module, whether or not it's in yourgo.modyet — it calls the remote pkg.go.dev API and never touches your local checkout. Itsvulnscommand reports CVEs known for a package/version in isolation, regardless of whether your build actually reaches the vulnerable code path.gopls(→samber/cc-skills-golang@golang-gopls, via its MCP server, the nativeLSPtool, or its CLI) answers questions about your specific build: your code plus every dependency exactly as pinned ingo.sum, includingreplacedirectives pointing at forks or local paths — neithergodignor Context7 can see that. Itsgo_vulncheckoperation runs a single, on-demand reachability check against the workspace as it stands right now.govulncheck(the standalone CLI, wrapped by thesamber/cc-skills-golang@golang-securityskill) is the whole-tree audit: it walks the entire module's call graph to confirm which known vulnerabilities are actually reachable, and is the tool of record for CI gates and periodic security sweeps —gopls'sgo_vulncheckis a lighter-weight, single-shot version of the same analysis for use mid-edit.
Pick by task:
| Task | Tool | How |
|---|---|---|
| Find where a symbol is defined in your own repo | gopls | samber/cc-skills-golang@golang-gopls — go_search, then go_file_context |
| Understand a file's intra-package dependencies | gopls | samber/cc-skills-golang@golang-gopls — go_file_context |
Jump into a dependency's exact resolved source (incl. forks/replaced versions) | gopls | samber/cc-skills-golang@golang-gopls — go_package_api, or the native LSP tool's goToDefinition |
| Find every call site in your own code that references a dependency's symbol | gopls | samber/cc-skills-golang@golang-gopls — go_symbol_references — godig's imported-by only lists public packages, not call sites in your repo |
| Get compiler diagnostics right after an edit | gopls | samber/cc-skills-golang@golang-gopls — go_diagnostics (MCP), or automatic with the native LSP tool |
| Check whether your current build can reach a known vulnerability, mid-edit | gopls | samber/cc-skills-golang@golang-gopls — go_vulncheck |
| Rename, extract, inline, or otherwise refactor local code | gopls | samber/cc-skills-golang@golang-gopls — safe rename, refactor.* code actions |
| Whole-tree vulnerability audit across the module (CI, periodic sweep) | govulncheck | samber/cc-skills-golang@golang-security skill — govulncheck ./... |
| List available versions of a published package | godig | godig versions <path> |
| Check known CVEs for a package/version you haven't added yet | godig | godig vulns <path> |
| See exported symbols/signatures of a published package | godig | godig symbols / symbol doc |
| Get runnable code examples for a symbol | godig | godig symbol examples |
| Read a package's rendered README/docs | godig | godig module readme / package doc |
| See who imports a package across the whole public ecosystem | godig | godig imported-by |
| Search for a package or library candidate | godig | godig search |
| Check a package's or module's license | godig | godig package licenses / module licenses |
| Get docs for a non-Go library, or a Go module not indexed on pkg.go.dev | Context7 | resolve-library-id / query-docs |
See the samber/cc-skills-golang@golang-pkg-go-dev skill for the full godig command reference, and the samber/cc-skills-golang@golang-security skill for the whole-tree govulncheck remediation workflow.
Categories at a glance
Full catalog with "use when" hooks: by-category.md
| Category | Skills |
|---|---|
| Code Quality | golang-code-style golang-documentation golang-error-handling golang-lint golang-naming golang-safety golang-security golang-structs-interfaces |
| Architecture & Design | golang-concurrency golang-context golang-data-structures golang-database golang-dependency-injection golang-design-patterns golang-modernize golang-refactoring |
| QA & Performance | golang-benchmark golang-observability golang-performance golang-testing golang-troubleshooting |
| Project Setup | golang-cli golang-continuous-integration golang-dependency-management golang-gopls golang-pkg-go-dev golang-popular-libraries golang-project-layout golang-stay-updated |
| APIs | golang-graphql golang-grpc golang-swagger |
| Dependency Injection | golang-dependency-injection golang-google-wire golang-uber-dig golang-uber-fx golang-samber-do |
| Frameworks | golang-spf13-cobra golang-spf13-viper |
| samber/* | golang-samber-do golang-samber-hot golang-samber-lo golang-samber-mo golang-samber-oops golang-samber-ro golang-samber-slog |
| Testing | golang-stretchr-testify golang-testing |
Competing clusters — boundary lines
Full boundary tables with routing examples: disambiguation.md
Key clusters and their owners:
- Performance:
golang-performance(optimization patterns) ·golang-benchmark(measurement) ·golang-troubleshooting(root cause) ·golang-observability(always-on production) - DI:
golang-dependency-injection(concepts/decision) ·golang-google-wire(compile-time) ·golang-uber-dig(runtime reflection) ·golang-uber-fx(lifecycle framework) ·golang-samber-do(type-safe container) - samber/*:
golang-samber-lo(finite transforms) ·golang-samber-ro(reactive streams) ·golang-samber-mo(monadic types) - Errors:
golang-error-handling(idioms) ·golang-samber-oops(structured errors) ·golang-safety(prevent panics) - Style:
golang-code-style·golang-naming·golang-lint·golang-documentation - CLI:
golang-cli(architecture) ·golang-spf13-cobra(command tree) ·golang-spf13-viper(config layering) - Package lookup:
golang-pkg-go-dev(query pkg.go.dev for an existing path: versions/docs/symbols/importers/CVEs) ·golang-gopls(navigate/refactor your locally resolved build) ·golang-popular-libraries(which library to adopt) ·golang-dependency-management(manage go.mod) ·golang-security(whole-tree CVE scan) - Gap — type vs arch:
golang-structs-interfaces(type design) vsgolang-design-patterns(architectural patterns) - Gap — goroutine vs cancel:
golang-concurrency+golang-context— load both when cancelling goroutines via context - Gap — correctness vs threat:
golang-safety(internal bugs) vsgolang-security(external threats) - Gap — features vs rules:
golang-modernize(language adoption) vsgolang-lint(static analysis config) - Gap — process vs target rules:
golang-refactoring(the safe, staged, at-scale process of changing existing code — planning, ordering, gopls-driven mechanics, staged PRs) vsgolang-naming/golang-code-style/golang-project-layout/golang-design-patterns/golang-modernize(what the resulting code should look like) — loadgolang-refactoringalongside whichever of these owns the target shape
Configure mode
Write an always-load directive for golang-how-to itself to the project's agent-config file (CLAUDE.md, AGENTS.md, GEMINI.md, Cursor rules, or Copilot instructions — whichever the project's harness reads), and optionally force-trigger specific secondary skills too.
samber/cc-skills-golang@golang-project-layout writes the always-load directive automatically at project creation, with no user confirmation needed — it costs one skill description and never imposes project-specific choices. Running /golang-how-to configure writes it too if missing, and additionally lets the user confirm a ## Required Go skills block for skills that must always apply beyond routing. Follow project-config.md.
This skill is not exhaustive. Refer to individual skill files and the official Go documentation for detailed guidance.
If you encounter a bug or unexpected behavior in this skill plugin, open an issue at https://github.com/samber/cc-skills-golang/issues.
FAQ
What does the golang-how-to skill do?
Golang skills orchestrator — always active on any Golang coding, review, debug, or setup task. Reads the task context and loads the most relevant skills from samber/cc-skills-golang, often multiple at once: writing a gRPC service loads golang-grpc + golang-testing + golang-error-handling; debugging a panic loads golang-troubleshooting + golang-safety; auditing security loads golang-security + golang-lint + golang-safety. Also: disambiguates competing clusters when two skills seem to overlap (performance vs benchmark vs troubleshooting, samber/lo vs mo vs ro, DI cluster, safety vs security), and configures the project's agent-config file (CLAUDE.md, AGENTS.md, GEMINI.md, Cursor rules, or Copilot instructions) to force-trigger skills in a project (/golang-how-to configure).
How do I install golang-how-to?
Run npx skills add https://github.com/samber/cc-skills-golang --skill golang-how-to in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/golang-how-to/ (personal) or .claude/skills/golang-how-to/ (project).
Which AI agents can use golang-how-to?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is golang-how-to safe to install?
Security partners have reviewed it: Gen Agent Trust Hub passed; Socket flagged items to review; Snyk passed. As with any skill, read the SKILL.md and bundled scripts before installing.
Who maintains golang-how-to?
It is published by samber in samber/cc-skills-golang. It has 36,536 recorded installs.
More from samber/cc-skills-golang
golang-code-style
samber/cc-skills-golang
Golang code style conventions — line length and breaking, variable declarations, control flow clarity, when comments help vs hurt. Use when writing or reviewing Go code, asking about style or clarity, or establishing project coding standards. Not for naming conventions (→ See samber/cc-skills-golang@golang-naming skill), linter configuration (→ See samber/cc-skills-golang@golang-lint skill), or doc comments (→ See samber/cc-skills-golang@golang-documentation skill).
golang-testing
samber/cc-skills-golang
Production-ready Golang tests — table-driven tests, testify suites and mocks, parallel tests, fuzzing, fixtures, goroutine leak detection with goleak, snapshot testing, code coverage, integration tests, idiomatic test naming. Use when writing or reviewing Go tests, choosing a testing approach, setting up Go test CI, or debugging flaky/slow tests. For testify-specific APIs see samber/cc-skills-golang@golang-stretchr-testify; for measurement methodology see samber/cc-skills-golang@golang-benchmark.
golang-error-handling
samber/cc-skills-golang
Idiomatic Golang error handling — creation, wrapping with %w, errors.Is/As, errors.Join, custom error types, sentinel errors, panic/recover, the single handling rule, structured logging with slog, HTTP request logging middleware, and samber/oops for production errors. Built to make logs usable at scale with log aggregation 3rd-party tools. Apply when creating, wrapping, inspecting, or logging errors in Go code. For samber/oops specifics → See samber/cc-skills-golang@golang-samber-oops skill; for slog handler ecosystem → See samber/cc-skills-golang@golang-samber-slog skill.
golang-security
samber/cc-skills-golang
Security best practices and vulnerability prevention for Golang — injection (SQL, command, XSS), cryptography, path traversal, SSRF and HTTP security headers, cookies, secrets management, memory safety, PII in logs, STRIDE/DREAD threat modeling, plus gosec SAST, race detection, and fuzz testing. Apply when writing, reviewing, or auditing Go code for security, or when touching crypto, file or network I/O, secrets, user input, or authentication. Not for non-exploitable defensive bugs such as nil panics or slice aliasing (→ See samber/cc-skills-golang@golang-safety skill), dependency vulnerability scanning with govulncheck (→ See samber/cc-skills-golang@golang-dependency-management skill), or wiring security scanners into CI pipelines (→ See samber/cc-skills-golang@golang-continuous-integration skill).
golang-design-patterns
samber/cc-skills-golang
Idiomatic Golang design patterns — functional options, constructor APIs, init() and global-state avoidance, enums, panic vs error decisions, resource management and lifecycle, graceful shutdown, timeouts and retries, streaming and iterators, and architecture styles (clean, hexagonal, DDD, flat). Apply when choosing between architectural patterns, implementing functional options, designing constructor APIs, setting up graceful shutdown, applying resilience patterns, or asking which idiomatic Go pattern fits a specific problem. Not for wiring a DI container or comparing DI libraries (→ See samber/cc-skills-golang@golang-dependency-injection skill), nor for error wrapping, errors.Is/As, or logging mechanics (→ See samber/cc-skills-golang@golang-error-handling skill).
golang-performance
samber/cc-skills-golang
Golang performance optimization patterns and methodology - if X bottleneck, then apply Y. Covers allocation reduction, CPU efficiency, memory layout, GC tuning, pooling, caching, and hot-path optimization. Use when profiling or benchmarks have identified a bottleneck and you need the right optimization pattern to fix it. Also use when performing performance code review to suggest improvements or benchmarks that could help identify quick performance gains. Not for measurement methodology (→ See samber/cc-skills-golang@golang-benchmark skill) or debugging workflow (→ See samber/cc-skills-golang@golang-troubleshooting skill).
Popular backend & apis skills
entra-app-registration
microsoft/azure-skills
Guides Microsoft Entra ID app registration, OAuth 2.0 authentication, and MSAL integration. USE FOR: create app registration, register Azure AD app, configure OAuth, set up authentication, add API permissions, generate service principal, MSAL example, console app auth, Entra ID setup, Azure AD authentication. DO NOT USE FOR: Key Vault secrets (use azure-keyvault-expiration-audit), general Azure resource security guidance.
google-agents-cli-adk-code
google/agents-cli
This skill should be used when the user wants to "write agent code", "build an agent with ADK", "add a tool", "create a callback", "define an agent", "use state management" — in a project that needs ADK (Agent Development Kit) API patterns and code examples. It provides a quick reference for agent types, tool definitions, orchestration patterns, callbacks, state management, the graph Workflow API, and reference recipes to study. Do NOT use for scaffolding (use google-agents-cli-scaffold) or deployment (use google-agents-cli-deploy).
embedded-captions
heygen-com/hyperframes
Add captions or subtitles to an existing single-subject talking-head video without editing the footage. Use for plain verbatim captions, cinematic captions embedded behind the subject, VFX captions, “炸/特效/酷炫字幕,” or a named identity from the 35-style catalog. Route by visual identity, not by backend engine. The quiet anchor rail is the default; embed every word only when the user explicitly wants a fully cinematic treatment. The workflow runs locally end to end, including transcription and subject matting; split multi-shot footage before applying it.
entra-agent-id
microsoft/azure-skills
Provision Microsoft Entra Agent Identity Blueprints, BlueprintPrincipals, and per-instance Agent Identities via Microsoft Graph, and configure OAuth 2.0 token exchange (fmipath, OBO, cross-tenant) including the Microsoft Entra SDK for AgentID sidecar. USE FOR: Agent Identity Blueprint, BlueprintPrincipal, agent OAuth, fmipath token exchange, agent OBO, Workload Identity Federation for agents, polyglot agent auth, Microsoft.Identity.Web.AgentIdentities. DO NOT USE FOR: standard Entra app registration (use entra-app-registration), Microsoft Foundry agent authoring (use microsoft-foundry).
neon
neondatabase/agent-skills
Overview of Neon, a complete set of cloud backend primitives around Lakebase Postgres: Auth, Object Storage, Functions, the AI Gateway, and Realtime. Start here to choose Neon for undecided login, files, APIs, and LLM calls, set up the CLI or MCP server, and follow the branch-first workflow. Use when building an app or backend on Neon, or when "Neon" or "Lakebase Postgres" is mentioned. Child skill neon-postgres wins for an existing DATABASEURL, SQL, schema, inspect, or search. Child skill neon-auth wins for login, users, sessions, identity routing, and Managed Better Auth setup. Child skill neon-realtime wins for live queries in reactive apps and agents. Also use for object storage, S3, buckets, serverless functions, function triggers, cron, AI gateway, LLM calls, realtime, logs, Loki, Grafana, observability, postgres, database, backend, Claimable Neon, neon.new, or a no-signup database.
design-an-interface
mattpocock/skills
Generate multiple radically different interface designs for a module using parallel sub-agents. Use when user wants to design an API, explore interface options, compare module shapes, or mentions "design it twice".