CommunityProgramación y desarrollogithub.com

samber/golang-how-to

Orquestrador de habilidades de Go: siempre activo en cualquier tarea de codificación, revisión, depuración o configuración de Go. Lee el contexto de la tarea y carga las habilidades más relevantes de samber/cc-skills-golang, a menudo múltiples a la vez.

¿Qué es golang-how-to?

Este skill actúa como un orquestador inteligente de habilidades de Go para asistentes de IA (como Claude Code, Cursor, Codex, etc.). Cuando un desarrollador enfrenta cualquier tarea relacionada con Go —ya sea codificar, revisar código, depurar un panic, auditar seguridad o configurar un proyecto— el orquestador analiza el contexto y carga simultáneamente las habilidades primarias y secundarias más relevantes del repositorio `samber/cc-skills-golang`. Por ejemplo, al escribir un servicio gRPC se cargan `golang-grpc`, `golang-testing` y `golang-error-handling`; al depurar un panic se cargan `golang-troubleshooting` y `golang-safety`; al auditar seguridad se cargan `golang-security`, `golang-lint` y `golang-safety`. Además, resuelve ambigüedades cuando dos habilidades parecen solaparse (por ejemplo, rendimiento vs benchmark vs troubleshooting) mostrando tablas de delimitación, y permite configurar el archivo de configuración del agente (CLAUDE.md, AGENTS.md, GEMINI.md, reglas de Cursor o instrucciones de Copilot) para forzar la activación de habilidades en un proyecto mediante el comando `/golang-how-to configure`. Su objetivo es eliminar la fricción de elegir manualmente qué skill usar y garantizar que el asistente tenga el contexto completo desde el primer momento, mejorando la calidad y coherencia de las respuestas.

Compatible con✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI
npx skills add https://github.com/samber/cc-skills-golang/tree/main/skills/golang-how-to

Installed? Explore more Programación y desarrollo skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Persona: Eres un orquestador de habilidades de Go. Para cada tarea de Go, identifica todas las habilidades relevantes y cárgalas juntas; rara vez una tarea pertenece a una sola habilidad.

Modos:

  • Orquestar — para cualquier tarea de codificación, revisión, depuración o configuración de Go, carga la habilidad principal junto con todas las habilidades secundarias aplicables simultáneamente.
  • Desambiguar — cuando dos habilidades parecen solaparse, muestra la tabla de límites. Consulta disambiguation.md.
  • Configurar — escribe la directiva de carga siempre para golang-how-to en sí, más un bloque opcional ## Habilidades Go requeridas, en el archivo de configuración del agente del proyecto (CLAUDE.md, AGENTS.md o equivalente). Sigue project-config.md.

Preguntas: En el modo Configurar, haz preguntas al usuario a través de la herramienta de preguntas del entorno, nunca como prosa de texto plano. Una pregunta a la vez, espera la respuesta. Si el entorno no tiene herramienta de preguntas, pregunta en prosa con las mismas opciones.

Dependencias: gopls — go install golang.org/x/tools/gopls@latest; la herramienta LSP integrada de Claude Code también necesita ENABLE_LSP_TOOL=1 y un servidor de lenguaje Go configurado (consulta Navegación de código con gopls).

Carga de habilidades

Para cada tarea, carga la habilidad principal y todas las habilidades secundarias aplicables al mismo tiempo. No esperes; cárgalas juntas al inicio.

IntenciónPrincipalTambién cargar
Diseñar una API, elegir un patróngolang-design-patternsgolang-structs-interfaces, golang-naming
Nombrar un tipo, función o paquetegolang-naminggolang-code-style
Manejar errores de forma idiomáticagolang-error-handlinggolang-safety (código con muchos nil)
Escribir gorutinas, canales, sincronizacióngolang-concurrencygolang-context (si hay cancelación)
Pasar plazos / cancelar operacionesgolang-contextgolang-concurrency (si hay gorutinas)
Diseñar structs, incrustar, usar interfacesgolang-structs-interfacesgolang-design-patterns
Consultas y transacciones de base de datosgolang-databasegolang-error-handling, golang-security
Construir un servicio gRPCgolang-grpcgolang-testing, golang-error-handling
Construir una API GraphQLgolang-graphqlgolang-testing, golang-error-handling
Construir un árbol de comandos CLIgolang-spf13-cobragolang-cli, golang-spf13-viper (si hay configuración)
Capa de configuración desde banderas/archivo/variables de entornogolang-spf13-vipergolang-spf13-cobra
Escribir pruebasgolang-testinggolang-stretchr-testify (si se usa testify)
Aplicar patrones de optimizacióngolang-performancegolang-benchmark (medir primero)
Medir con pprof / benchstatgolang-benchmarkgolang-performance (corregir), golang-troubleshooting (causa raíz)
Depurar un panic o comportamiento inesperadogolang-troubleshootinggolang-safety, golang-benchmark (si está relacionado con rendimiento)
Monitorear en produccióngolang-observabilitygolang-performance (si hay incumplimiento de SLO)
Auditar vulnerabilidades de seguridadgolang-securitygolang-safety, golang-lint
Revisar formato y estilogolang-code-stylegolang-naming, golang-lint
Refactorizar o reestructurar código existentegolang-refactoringgolang-naming, golang-code-style, golang-project-layout
Configurar golangci-lintgolang-lintgolang-code-style
Escribir godoc / README / CHANGELOGgolang-documentationgolang-naming
Configurar una nueva estructura de proyectogolang-project-layoutgolang-design-patterns, golang-dependency-injection, golang-lint
Configurar pipeline CI/CDgolang-continuous-integrationgolang-lint, golang-security
Elegir una bibliotecagolang-popular-librarieshabilidad específica de la biblioteca relevante
Consultar documentación, versiones, importadores o CVEs de un paquetegolang-pkg-go-devgolang-dependency-management
Navegar, diagnosticar o refactorizar código local (definiciones, referencias, renombrar)golang-gopls—
Adoptar nuevas características del lenguaje Gogolang-modernizegolang-lint
Usar samber/lo (helpers de slice/mapa)golang-samber-logolang-data-structures, golang-performance
Usar samber/oops (errores estructurados)golang-samber-oopsgolang-error-handling
Usar log/sloggolang-samber-sloggolang-observability, golang-error-handling
Usar inyección de dependenciasgolang-dependency-injectiongolang-google-wire o golang-uber-dig o golang-uber-fx o golang-samber-do

Todos los identificadores de habilidades anteriores son formas cortas de samber/cc-skills-golang@<nombre>.

Navegación de código con gopls

gopls proporciona inteligencia de código semántica para Go: ir a definición, encontrar referencias, diagnósticos, API de paquetes, búsqueda de símbolos, refactorización. → Consulta la habilidad samber/cc-skills-golang@golang-gopls para las tres formas de acceder a ella (su propio servidor MCP, la herramienta nativa LSP y su CLI), la matriz de capacidades completa y flujos de trabajo eficientes de lectura/edición.

gopls solo razona sobre el código que está presente y resoluble en la compilación local: tu espacio de trabajo más cada dependencia exactamente como está fijada en go.sum (incluyendo directivas replace). Para cualquier hecho que no esté vinculado a tu compilación local —historial de versiones, licencias, importadores de todo el ecosistema, un paquete que aún no has añadido— usa golang-pkg-go-dev (godig). Consulta la sección godig vs gopls vs Context7 vs govulncheck a continuación para el límite completo.

godig vs gopls vs Context7 vs govulncheck

Cuatro herramientas pueden responder "¿esta dependencia es segura de usar?" y no se solapan tanto como parece:

  • Context7 es un recolector de documentación de propósito general y multilingüe, útil cuando no existe una fuente más específica. Para un paquete o módulo de Go, godig es casi siempre la mejor opción: obtiene datos estructurados y específicos de Go directamente de pkg.go.dev — versiones exactas, símbolos exportados con firmas, ejemplos ejecutables, imported-by y vulnerabilidades conocidas — en lugar de los documentos genéricos extraídos/recopilados de Context7, que no exponen esa estructura y pueden ir con retraso o perder módulos Go menos conocidos. Recurre a Context7 solo cuando la documentación de una dependencia realmente no existe o no está indexada en pkg.go.dev.
  • godig responde preguntas sobre el ecosistema publicado: cualquier paquete o módulo de Go, esté o no en tu go.mod aún — llama a la API remota de pkg.go.dev y nunca toca tu repositorio local. Su comando vulns reporta CVEs conocidos para un paquete/versión de forma aislada, independientemente de si tu compilación realmente alcanza la ruta de código vulnerable.
  • gopls (→ samber/cc-skills-golang@golang-gopls, a través de su servidor MCP, la herramienta nativa LSP o su CLI) responde preguntas sobre tu compilación específica: tu código más cada dependencia exactamente como está resuelta en tu go.mod.

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

samber/golang-benchmark

Golang benchmarking, profiling, and performance measurement. Use when writing, running, or comparing Go benchmarks, profiling hot paths with pprof, interpreting CPU/memory/trace profiles, analyzing results with benchstat, setting up CI benchmark regression detection, or investigating production performance with Prometheus runtime metrics. Also use when the developer needs deep analysis on a specific performance indicator - this skill provides the measurement methodology, while `samber/cc-skills-golang@golang-performance` provides the optimization patterns.

samber/golang-cli

Golang CLI application development. Use when building, modifying, or reviewing a Go CLI tool — especially for command structure, flag handling, configuration layering, version embedding, exit codes, I/O patterns, signal handling, shell completion, argument validation, and CLI unit testing. Also triggers when code uses cobra, viper, or urfave/cli. For cobra-specific APIs → See `samber/cc-skills-golang@golang-spf13-cobra` skill; for viper configuration layering → See `samber/cc-skills-golang@golang-spf13-viper` skill.

samber/golang-code-style

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).

samber/golang-concurrency

Golang concurrency patterns. Use when writing or reviewing concurrent Go code involving goroutines, channels, select, locks, sync primitives, errgroup, singleflight, worker pools, or fan-out/fan-in pipelines. Also triggers when you detect goroutine leaks, race conditions, channel ownership issues, or need to choose between channels and mutexes.

samber/golang-context

Idiomatic context.Context usage in Golang — propagation through API boundaries, cancellation, timeouts and deadlines, request-scoped values, context.WithoutCancel for background work outliving requests. Apply when designing context propagation across layers, debugging leaked or unexpired contexts, choosing between context.Background/TODO/WithoutCancel, or storing values in context. Not for code that merely accepts ctx as first parameter.

samber/golang-continuous-integration

CI/CD pipeline configuration using GitHub Actions for Golang projects — testing, linting, SAST, security scanning, code coverage, Dependabot, Renovate, GoReleaser, code review automation, and release pipelines. Use when setting up or improving Go project CI, configuring GitHub Actions workflows, adding linters or security scanners, automating dependency updates, or adding quality gates.

samber/golang-database

Comprehensive guide for Go database access — parameterized queries, struct scanning, NULLable columns, transactions, isolation levels, SELECT FOR UPDATE, connection pool, batch processing, context propagation, and migration tooling. Use when writing, reviewing, or debugging Golang code that interacts with PostgreSQL, MariaDB, MySQL, or SQLite; for database testing; or for questions about database/sql, sqlx, or pgx. Does NOT generate database schemas or migration SQL.

samber/golang-data-structures

Golang data structures — slices (internals, capacity growth, preallocation, slices package), maps (internals, hash buckets, maps package), arrays, container/list/heap/ring, strings.Builder vs bytes.Buffer, generic collections, pointers (unsafe.Pointer, weak.Pointer), and copy semantics. Use when choosing or optimizing Go data structures, implementing generic containers, using container/ packages, unsafe or weak pointers, or questioning slice/map internals.

samber/golang-dependency-injection

Comprehensive guide for dependency injection (DI) in Golang. Covers why DI matters (testability, loose coupling, separation of concerns, lifecycle management), manual constructor injection, and DI library comparison (google/wire, uber-go/dig, uber-go/fx, samber/do). Use this skill when designing service architecture, setting up dependency injection, refactoring tightly coupled code, managing singletons or service factories, or when the user asks about inversion of control, service containers, or wiring dependencies in Go. For a specific DI library, → See `samber/cc-skills-golang@golang-google-wire`, `samber/cc-skills-golang@golang-uber-dig`, `samber/cc-skills-golang@golang-uber-fx`, or `samber/cc-skills-golang@golang-samber-do` skills.

samber/golang-dependency-management

Dependency management strategies for Golang projects — go.mod management, installing/upgrading packages, Minimal Version Selection, vulnerability scanning, outdated dependency tracking, binary size analysis, Dependabot/Renovate setup, conflict resolution, and go.work workspaces. Use when adding, removing, or upgrading Go dependencies, auditing vulnerabilities, resolving version conflicts, or setting up automated dependency updates.

samber/golang-design-patterns

Idiomatic Golang design patterns — functional options, constructors, error flow and cascading, resource management and lifecycle, graceful shutdown, resilience, architecture, dependency injection, data handling, streaming, and more. Apply when explicitly 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.

samber/golang-documentation

Comprehensive documentation guide for Golang projects, covering godoc comments, README, CONTRIBUTING, CHANGELOG, Go Playground, Example tests, API docs, and llms.txt. Use when writing or reviewing doc comments, documentation, adding code examples, setting up doc sites, or discussing documentation best practices. Triggers for both libraries and applications/CLIs.

samber/golang-error-handling

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.

samber/golang-google-wire

Compile-time dependency injection in Golang using google/wire — wire.NewSet, wire.Build, wire.Bind (interface→concrete), wire.Struct, wire.Value, wire.InterfaceValue, wire.FieldsOf, cleanup functions, //go:build wireinject injector files, and generated wire_gen.go. Apply when using or adopting google/wire, when the codebase imports `github.com/google/wire`, or when wiring an application graph at compile time via `wire.Build`. For runtime DI with reflection, see `samber/cc-skills-golang@golang-uber-dig` skill.

samber/golang-gopls

Golang semantic code intelligence via `gopls`, the official Go language server — go-to-definition, find references, call/implementation hierarchy, workspace symbol search, package API discovery, diagnostics, safe rename, refactors (extract/inline/fill/rewrite code actions), formatting, and generated tests. Reaches an agent via gopls's own MCP server (`go_*` tools), Claude Code's native `LSP` tool, or the `gopls` CLI. Use when navigating or refactoring Go code — jumping to a definition, finding call sites before a rename, understanding a file's or package's dependencies, running diagnostics after an edit, or extracting/inlining/renaming. Not for the published ecosystem — packages not in your `go.mod`, versions, licenses, importers — → See `samber/cc-skills-golang@golang-pkg-go-dev` skill (`godig`). Not for a whole-tree vulnerability audit → See `samber/cc-skills-golang@golang-security` skill (`govulncheck`).

samber/golang-graphql

Implements GraphQL APIs in Golang using gqlgen or graphql-go. Apply when building GraphQL servers, designing schemas, writing resolvers, handling subscriptions, or integrating GraphQL with existing Go HTTP services. Also apply when the codebase imports `github.com/99designs/gqlgen` or `github.com/graph-gophers/graphql-go`.

samber/golang-grpc

Provides gRPC usage guidelines, protobuf organization, and production-ready patterns for Golang microservices. Use when implementing, reviewing, or debugging gRPC servers/clients, writing proto files, setting up interceptors, handling gRPC errors with status codes, configuring TLS/mTLS, testing with bufconn, or working with streaming RPCs.

samber/golang-lint

Linting best practices and golangci-lint configuration for Golang projects — running linters, configuring .golangci.yml, suppressing warnings with nolint directives, interpreting lint output, and selecting linters. Use when configuring golangci-lint, asking about lint warnings or nolint suppressions, setting up code quality tooling, or choosing linters. Also use when the user mentions golangci-lint, go vet, staticcheck, or revive.

samber/golang-modernize

Modernize Golang code to use recent language features, standard library improvements, and idiomatic patterns. Trigger proactively when writing or reviewing Go code and old-style patterns are detected, or when encountering a deprecation warning. Also use when the user explicitly asks for modernization, a Go version upgrade, or a CI/tooling refresh.

samber/golang-naming

Go (Golang) naming conventions — covers packages, constructors, structs, interfaces, constants, enums, errors, booleans, receivers, getters/setters, functional options, acronyms, test functions, and subtest names. Use this skill when writing new Go code, reviewing or refactoring, choosing between naming alternatives (New vs NewTypeName, isConnected vs connected, ErrNotFound vs NotFoundError, StatusReady vs StatusUnknown at iota 0), debating Go package names (utils/helpers anti-patterns), or asking about Go naming best practices. Also trigger when the user mentions MixedCaps vs snake_case, ALL_CAPS constants, Get-prefix on getters, or error string casing. Do NOT use for general Go implementation questions that don't involve naming decisions.

Skills relacionados