CommunityProgramación y desarrollogithub.com

samber/golang-gopls

Inteligencia de código semántico para Go a través de `gopls`, el servidor de lenguaje oficial de Go: ir a definición, encontrar referencias, jerarquía de llamadas/implementación, búsqueda de símbolos, descubrimiento de API, diagnósticos, renombrado seguro, refactorizaciones, formateo y pruebas generadas.

¿Qué es golang-gopls?

Este skill proporciona inteligencia de código semántico completa para el lenguaje de programación Go, utilizando `gopls`, el servidor de lenguaje oficial. Está diseñado para agentes de IA (como Claude Code, Cursor o Codex) que necesitan navegar, analizar y modificar código Go de manera precisa y eficiente. El skill se comunica con un agente a través de tres mecanismos: el servidor MCP propio de gopls (`go_*` tools), la herramienta nativa `LSP` de Claude Code, o la CLI de `gopls`. Es especialmente útil para tareas como saltar a una definición, encontrar sitios de llamada antes de un renombrado, comprender las dependencias de un archivo o paquete, ejecutar diagnósticos después de una edición, o realizar refactorizaciones como extracción, inserción en línea o renombrado. No está diseñado para consultar el ecosistema externo de paquetes (versiones, licencias, etc.), para lo cual se recomienda el skill `samber/cc-skills-golang@golang-pkg-go-dev`. Tampoco es adecuado para auditorías de vulnerabilidades a nivel de árbol completo, que son cubiertas por el skill `samber/cc-skills-golang@golang-security`. El flujo de trabajo recomendado prioriza el uso del servidor MCP, seguido de la herramienta nativa LSP y, como último recurso, la CLI.

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

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 ingeniero de Go que recurre a la inteligencia de código semántico en lugar de grep cada vez que una pregunta trata sobre la compilación resuelta — grep encuentra texto, gopls encuentra significado (tipos, grafos de llamadas, sombreado, relaciones de implementación).

Dependencias: gopls — go install golang.org/x/tools/gopls@latest (v0.20+). La herramienta nativa LSP además necesita ENABLE_LSP_TOOL=1 y el plugin de marketplace gopls-lsp@claude-plugins-official (ver references/mcp.md).

gopls es el servidor de lenguaje oficial de Go. Solo responde preguntas sobre tu compilación resuelta local y específica — tu espacio de trabajo más cada dependencia exactamente como está fijada en go.sum, incluyendo directivas replace. Para un paquete que no forma parte de esa compilación (versiones, docs, licencias, CVEs de algo que aún no has añadido), → Consulta el skill samber/cc-skills-golang@golang-pkg-go-dev (godig).

Tres formas de usar gopls

No son intercambiables — elige según lo que ya sabes y lo que necesitas como resultado:

  • El servidor MCP propio de gopls (preferido para la mayoría de las tareas) — diseñado específicamente para agentes: las herramientas aceptan nombres, rutas de archivos y consultas difusas en lugar de posiciones de cursor sin procesar. Regístrar una vez por máquina: claude mcp add gopls -- gopls mcp. Se ejecuta sin interfaz gráfica a través de stdio, sin editor adjunto, solo ve archivos guardados en disco — la opción predeterminada correcta para un flujo de trabajo solo de agente. Ver references/mcp.md para cada herramienta.
  • La herramienta nativa LSP — la integración de estilo editor integrado de Claude Code. Desactivada por defecto: establece ENABLE_LSP_TOOL=1, instala gopls e instala el plugin oficial de marketplace gopls-lsp@claude-plugins-official para conectarlo como el servidor de lenguaje Go. Las operaciones (goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, jerarquía de llamadas) se basan en line/character, por lo que son más útiles una vez que ya tienes una ubicación, típicamente justo después de una búsqueda grep o una lectura. Valor único: los diagnósticos del compilador se insertan automáticamente en el contexto después de cada edición, sin necesidad de una llamada explícita.
  • La CLI de gopls — el mismo motor, invocado como gopls <comando> <archivo:línea:columna>. El equipo de Go lo documenta como experimental y solo para depuración — "no es eficiente, completo, flexible ni compatible oficialmente." Úsalo cuando ni el MCP ni la herramienta nativa estén configurados, o para una comprobación rápida y con script. Las posiciones son archivo:línea:columna (indexado desde 1, bytes UTF-8) o archivo:#desplazamiento (indexado desde 0). Ver references/cli.md.

Orden de preferencia: MCP → LSP nativo → CLI. Las herramientas MCP coinciden con la forma en que piensa un agente (por nombre/ruta, no por posición del cursor); la herramienta nativa añade diagnósticos automáticos gratuitos; la CLI es el fallback documentado de último recurso. Conecta tantas como estén disponibles y deja que la tarea elija la herramienta — una consulta para la que ya tienes una línea:col es barata a través de LSP, una consulta "dónde está X" es barata a través de go_search, una comprobación rápida sin supervisión es barata a través de la CLI.

Capacidad → CLI → MCP → LSP nativo

Mapeo completo de cada capacidad a su comando CLI, herramienta MCP y operación LSP nativa: references/matrix.md.

Casos de uso

  • Navegación — salta a una definición, una implementación o rastrea un grafo de llamadas antes de tocar código que no escribiste. Detalles: references/features.md.
  • Descubrimiento de código — aprende la forma de un espacio de trabajo (go_workspace), busca de forma difusa un símbolo que no puedes ubicar exactamente (go_search), o lee la superficie pública de una dependencia (go_package_api) antes de usarla.
  • Documentación — pasa el cursor para obtener información de tipo/doc/tamaño, ayuda de firma mientras llamas a una función, o navega por la documentación renderizada del paquete (source.doc, incluyendo paquetes internos que pkg.go.dev nunca ve).
  • Diagnósticos y seguridad — errores del compilador y analizador después de cada edición (go_diagnostics / automático con LSP), más una verificación de alcanzabilidad go_vulncheck ligera: una vez como línea base justo después de detectar el espacio de trabajo, y de nuevo después de cualquier cambio en go.mod.
  • Formateo — formateo canónico equivalente a gofmt y organización de importaciones, tanto programable como impulsado por acciones de código.
  • Refactorización — renombrado seguro (bloquea un cambio que rompería la satisfacción de la interfaz), extraer/en línea, y toda la familia refactor.rewrite.* (rellenar struct/switch, invertir if, dividir/unir líneas, eliminar parámetro no usado, añadir etiquetas struct, implementar interfaz). Catálogo completo con trampas: references/features.md.

Flujos de trabajo eficientes

Estos flujos de trabajo de Lectura/Edición codifican el orden que evita consultas redundantes y ediciones aplicadas a medias — trata cada paso como obligatorio, no opcional, incluso para ahorrar un viaje de ida y vuelta.

  • Inicio de sesión — llama a go_workspace una vez para detectar si esto es un espacio de trabajo de Go; si lo es, sigue inmediatamente con una go_vulncheck base para descubrir vulnerabilidades que el espacio de trabajo ya porta. Esto es incondicional, separado de la verificación posterior del flujo de edición después de un cambio de dependencia.

Flujo de lectura (comprende antes de tocar nada):

  1. go_workspace — diseño (módulo/espacio de trabajo/GOPATH); la misma llamada que la verificación de inicio de sesión anterior si aún no se ha ejecutado.
  2. go_search — localiza de forma difusa un tipo/función/variable por nombre.
  3. go_file_context — justo después de leer cualquier archivo Go por primera vez, ve qué trae del resto de su paquete; vuelve a ejecutar si las dependencias de ese archivo cambian.
  4. go_package_api — la superficie pública de una dependencia de terceros o de un paquete hermano, sin leer cada archivo.

Flujo de edición (itera hasta que los diagnósticos estén limpios):

  1. Lee primero (flujo anterior).
  2. go_symbol_references antes de modificar cualquier definición — juzga el radio de explosión, luego lee cada archivo de referencia que necesita una edición coincidente.
  3. Realiza todas las ediciones planificadas, incluyendo las ediciones en los sitios de referencia, antes de continuar.
  4. go_diagnostics en cada archivo modificado — obligatorio después de cada modificación, no un pase de limpieza opcional.
  5. Corrige los errores reportados: revisa cualquier diferencia de corrección rápida sugerida antes de aplicarla, luego vuelve a ejecutar los diagnósticos para confirmar que la corrección se aplicó. Ignora los diagnósticos de sugerencia/información no relacionados con la tarea. Un mensaje de diagnóstico puede parafrasear el código fuente circundante en lugar de citarlo textualmente.
  6. Solo si las dependencias de go.mod cambiaron, ejecuta go_vulncheck en todo el espacio de trabajo — después de que los diagnósticos estén limpios, no antes.
  7. Ejecuta go test <rutas-de-paquetes-modificados> — no ./... a menos que se pida explícitamente.

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

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