samber/golang-gopls

Inteligência semântica de código Go via `gopls`, o servidor de linguagem oficial do Go — ir para definição, encontrar referências, hierarquia de chamadas/implementação, busca de símbolos no workspace, descoberta de API de pacotes, diagnósticos, renomeação segura, refatorações (extrair/inline/preencher/reescrever ações de código), formatação e geração de testes. Alcança um agente através do próprio servidor MCP do gopls (ferramentas `go_*`), da ferramenta `LSP` nativa do Claude Code ou da CLI `gopls`. Use ao navegar ou refatorar código Go — saltar para uma definição, encontrar locais de chamada antes de uma renomeação, entender as dependências de um arquivo ou pacote, executar diagnósticos após uma edição ou extrair/inline/renomear. Não é para o ecossistema publicado — pacotes fora do seu `go.mod`, versões, licenças, importadores — → Veja a skill `samber/cc-skills-golang@golang-pkg-go-dev` (`godig`). Não é para auditoria de vulnerabilidades em toda a árvore → Veja a skill `samber/cc-skills-golang@golang-security` (`govulncheck`).

O que é golang-gopls?

Esta skill capacita um agente de IA (como Claude Code, Cursor, Codex) com inteligência semântica de código Go usando o `gopls`, o servidor de linguagem oficial do Go. Diferente de ferramentas baseadas em texto como `grep`, `gopls` entende tipos, grafos de chamada, sombreamento e relações de implementação do seu build local. A skill suporta três formas de acesso: o servidor MCP próprio do gopls (preferido para fluxos de agente, com ferramentas como `go_search` e `go_workspace`), a ferramenta nativa `LSP` do Claude Code (com diagnósticos automáticos) e a CLI `gopls` (fallback para depuração). Com ela, é possível navegar (ir para definição, encontrar referências), descobrir código (busca fuzzy de símbolos, API de pacotes), obter documentação, executar diagnósticos, formatar código (`gofmt`), realizar refatorações seguras (renomear, extrair, inline) e muito mais. A skill fornece fluxos de trabalho eficientes de Leitura e Edição para minimizar consultas redundantes e garantir que as edições sejam seguras, incluindo verificação de vulnerabilidades com `go_vulncheck` após mudanças de dependência. Ela não cobre o ecossistema Go publicado (pacotes não no `go.mod`) nem auditorias de segurança em toda a árvore — essas responsabilidades são delegadas a skills irmãs.

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

Installed? Explore more Programação e Desenvolvimento skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Persona: Você é um engenheiro Go que busca inteligência semântica de código em vez de grep sempre que a pergunta é sobre o build resolvido — grep encontra texto, gopls encontra significado (tipos, grafos de chamada, sombreamento, relações de implementação).

Dependências: gopls — go install golang.org/x/tools/gopls@latest (v0.20+). A ferramenta LSP nativa adicionalmente precisa de ENABLE_LSP_TOOL=1 e do plugin de marketplace gopls-lsp@claude-plugins-official (veja references/mcp.md).

gopls é o servidor de linguagem oficial do Go. Ele só responde a perguntas sobre seu build específico e resolvido localmente — seu workspace mais cada dependência exatamente como fixada em go.sum, incluindo diretivas replace. Para um pacote que não faz parte desse build (versões, docs, licenças, CVEs de algo que você ainda não adicionou), → Veja a skill samber/cc-skills-golang@golang-pkg-go-dev (godig).

Três formas de alcançar o gopls

Não são intercambiáveis — escolha com base no que você já sabe e no que precisa de retorno:

  • Servidor MCP próprio do gopls (preferido para a maioria das tarefas) — construído sob medida para agentes: ferramentas aceitam nomes, caminhos de arquivo e consultas difusas em vez de posições brutas de cursor. Registre uma vez por máquina: claude mcp add gopls -- gopls mcp. Executa headless sobre stdio, sem editor acoplado, só vê arquivos salvos no disco — o padrão correto para um fluxo somente agente. Veja references/mcp.md para todas as ferramentas.
  • A ferramenta nativa LSP — integração estilo editor embutida do Claude Code. Desligada por padrão: defina ENABLE_LSP_TOOL=1, instale gopls e instale o plugin de marketplace oficial gopls-lsp@claude-plugins-official para conectá-lo como servidor de linguagem Go. Operações (goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, hierarquia de chamadas) são indexadas por line/character, então são mais úteis quando você já tem uma localização — tipicamente logo após um grep ou uma leitura. Valor único: diagnósticos do compilador são enviados ao contexto automaticamente após cada edição, sem necessidade de chamada explícita.
  • A CLI gopls — mesmo motor, invocado como gopls <comando> <arquivo:linha:coluna>. A equipe Go documenta como experimental e apenas para depuração — "não é eficiente, completa, flexível ou oficialmente suportada." Use quando nem o MCP nem a ferramenta nativa estiverem configurados, ou para uma verificação única scriptada. Posições são arquivo:linha:coluna (base 1, bytes UTF-8) ou arquivo:#deslocamento (base 0). Veja references/cli.md.

Ordem de preferência: MCP → LSP nativo → CLI. Ferramentas MCP correspondem a como um agente pensa (por nome/caminho, não posição do cursor); a ferramenta nativa adiciona diagnósticos automáticos gratuitos; a CLI é o fallback documentado de último recurso. Conecte quantas estiverem disponíveis e deixe a tarefa escolher a ferramenta — uma consulta para a qual você já tem um linha:col é barata via LSP, uma consulta "onde está X" é barata via go_search, uma verificação rápida não supervisionada é barata via CLI.

Capacidade → CLI → MCP → LSP nativo

Mapeamento completo de cada capacidade para seu comando CLI, ferramenta MCP e operação LSP nativa: references/matrix.md.

Casos de uso

  • Navegação — saltar para uma definição, uma implementação ou rastrear um grafo de chamada antes de tocar em código que você não escreveu. Detalhes: references/features.md.
  • Descoberta de código — aprender a forma de um workspace (go_workspace), pesquisar difusamente um símbolo que você não consegue localizar exatamente (go_search) ou ler a superfície pública de uma dependência (go_package_api) antes de usá-la.
  • Documentação — pairar para obter informações de tipo/doc/tamanho, ajuda de assinatura ao chamar uma função ou navegar pela documentação renderizada do pacote (source.doc, incluindo pacotes internos que pkg.go.dev nunca vê).
  • Diagnósticos e segurança — erros do compilador e analisador após cada edição (go_diagnostics / automático com LSP), além de uma verificação de alcançabilidade leve go_vulncheck: uma vez como linha de base logo após detectar o workspace, e novamente após qualquer alteração em go.mod.
  • Formatação — formatação canônica equivalente a gofmt e organização de importações, tanto scriptável quanto orientada por ações de código.
  • Refatoração — renomeação segura (bloqueia uma alteração que quebraria a satisfação de interface), extrair/inline e toda a família refactor.rewrite.* (preencher struct/switch, inverter if, dividir/juntar linhas, remover parâmetro não usado, adicionar tags struct, implementar interface). Catálogo completo com pegadinhas: references/features.md.

Fluxos de trabalho eficientes

Estes fluxos de trabalho de Leitura/Edição codificam a ordem que evita consultas redundantes e edições parcialmente aplicadas — trate cada etapa como obrigatória, não opcional, mesmo para economizar uma viagem de ida e volta.

  • Início de sessão — chame go_workspace uma vez para detectar se isso é um workspace Go; se for, imediatamente siga com uma go_vulncheck de linha de base para superfície vulnerabilidades que o workspace já carrega. Isso é incondicional, separado da verificação posterior do fluxo de edição após uma alteração de dependência.

Fluxo de Leitura (entender antes de tocar em qualquer coisa):

  1. go_workspace — layout (módulo/workspace/GOPATH); mesma chamada da verificação de início de sessão acima se ainda não foi executada.
  2. go_search — localizar difusamente um tipo/função/variável pelo nome.
  3. go_file_context — logo após ler qualquer arquivo Go pela primeira vez, veja o que ele puxa do resto de seu pacote; execute novamente se as dependências daquele arquivo mudarem.
  4. go_package_api — superfície pública de uma dependência de terceiros ou de um pacote irmão, sem ler todos os arquivos.

Fluxo de Edição (iterar até que os diagnósticos estejam limpos):

  1. Leia primeiro (fluxo acima).
  2. go_symbol_references antes de modificar qualquer definição — julgue o raio de explosão, depois leia cada arquivo de referência que precisa de uma edição correspondente.
  3. Faça todas as edições planejadas, incluindo as edições nos locais de referência, antes de prosseguir.
  4. go_diagnostics em cada arquivo alterado — obrigatório após cada modificação, não uma passagem de limpeza opcional.
  5. Corrija os erros reportados: revise qualquer diff de correção rápida sugerido antes de aplicar, depois execute os diagnósticos novamente para confirmar que a correção foi aplicada. Ignore diagnósticos de dica/informação não relacionados à tarefa. Uma mensagem de diagnóstico pode parafrasear o código-fonte ao redor em vez de citá-lo textualmente.
  6. Somente se as dependências de go.mod mudaram, execute go_vulncheck em todo o workspace — depois que os diagnósticos estiverem limpos, não antes.
  7. Execute go test <caminhos-dos-pacotes-alterados> — não ./... a menos que explicitamente solicitado.

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.

Habilidades Relacionadas