samber/golang-gopls

Intelligence sémantique du code Go via `gopls`, le serveur de langage Go officiel — aller à la définition, trouver les références, hiérarchie d'appels/implémentations, recherche de symbole dans l'espace de travail, découverte d'API de package, diagnostics, renommage sécurisé, refactoring (extraire/insérer/remplir/réécrire des actions de code), formatage et génération de tests. Accessible via le serveur MCP propre à gopls (outils `go_*`), l'outil `LSP` natif de Claude Code ou le CLI `gopls`. À utiliser pour naviguer ou refactoriser du code Go — sauter à une définition, trouver les sites d'appel avant un renommage, comprendre les dépendances d'un fichier ou d'un package, exécuter des diagnostics après une modification, ou extraire/insérer/renommer. Ne concerne pas l'écosystème publié — packages absents de votre `go.mod`, versions, licences, importateurs — → voir la compétence `samber/cc-skills-golang@golang-pkg-go-dev` (`godig`). Ni pour un audit de vulnérabilités sur tout l'arbre → voir la compétence `samber/cc-skills-golang@golang-security` (`govulncheck`).

Qu'est-ce que golang-gopls ?

Cette compétence offre une intelligence sémantique complète du code Go via `gopls`, le serveur de langage officiel Go. Elle permet de naviguer dans le code (aller à la définition, trouver les références, hiérarchie d'appels/implémentations), d'explorer les espaces de travail et les packages, d'obtenir des diagnostics automatiques après chaque modification, de formater le code selon les conventions Go, et de réaliser des refactorings avancés (renommage sécurisé, extraction/insertion, remplissage de structures/commutateurs, etc.). La compétence prend en charge trois méthodes d'accès, par ordre de préférence : le serveur MCP intégré de gopls (le plus adapté aux agents, outils nommés `go_*`), l'outil `LSP` natif de Claude Code (diagnostics poussés automatiquement, basé sur les positions ligne:colonne), et le CLI `gopls` (solution de repli expérimentale). Chaque méthode a ses forces ; l'agent doit utiliser la plus appropriée selon la tâche. Elle est utile pour tout développeur Go ou agent IA travaillant avec du code Go, car elle remplace les recherches textuelles (grep) par une compréhension réelle du code basée sur les types, les graphes d'appels et les relations entre symboles. Les workflows recommandés incluent une phase de lecture (découverte de l'espace de travail, recherche de symbole, contexte de fichier, API de package) et une phase d'édition (vérification des références avant modification, diagnostics après chaque édition, vérification de vulnérabilités après changement de dépendances).

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

Installed? Explore more Développement et programmation skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Persona : Vous êtes un ingénieur Go qui utilise l'intelligence sémantique du code plutôt que grep dès qu'une question concerne la construction résolue — grep trouve du texte, gopls trouve le sens (types, graphes d'appels, masquage, relations d'implémentation).

Dépendances : gopls — go install golang.org/x/tools/gopls@latest (v0.20+). L'outil LSP natif nécessite en plus ENABLE_LSP_TOOL=1 et le plugin marketplace gopls-lsp@claude-plugins-official (voir references/mcp.md).

gopls est le serveur de langage Go officiel. Il ne répond qu'aux questions concernant votre construction spécifique, résolue localement — votre espace de travail plus chaque dépendance exactement comme figée dans go.sum, y compris les directives replace. Pour un package qui ne fait pas partie de cette construction (versions, docs, licences, CVE d'un élément non encore ajouté) → voir la compétence samber/cc-skills-golang@golang-pkg-go-dev (godig) à la place.

Trois façons d'utiliser gopls

Non interchangeables — choisissez en fonction de ce que vous savez déjà et de ce dont vous avez besoin :

  • Le serveur MCP propre à gopls (recommandé pour la plupart des tâches) — conçu spécialement pour les agents : les outils acceptent des noms, des chemins de fichiers et des requêtes floues plutôt que des positions de curseur brutes. Enregistrez-le une fois par machine : claude mcp add gopls -- gopls mcp. Fonctionne sans tête sur stdio, sans éditeur attaché, ne voit que les fichiers sauvegardés sur disque — la bonne valeur par défaut pour un workflow purement agent. Voir references/mcp.md pour tous les outils.
  • L'outil LSP natif — l'intégration intégrée de Claude Code, semblable à un éditeur. Désactivé par défaut : définissez ENABLE_LSP_TOOL=1, installez gopls, et installez le plugin marketplace officiel gopls-lsp@claude-plugins-official pour le configurer comme serveur de langage Go. Les opérations (goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, hiérarchie d'appels) sont indexées par ligne/caractère, donc elles sont surtout utiles une fois que vous avez déjà un emplacement — typiquement juste après un grep ou une lecture. Valeur unique : les diagnostics du compilateur sont poussés automatiquement dans le contexte après chaque modification, sans appel explicite nécessaire.
  • Le CLI gopls — même moteur, invoqué comme gopls <commande> <fichier:ligne:col>. L'équipe Go le documente comme expérimental et réservé au débogage — « pas efficace, complet, flexible, ni officiellement supporté ». Utilisez-le quand ni MCP ni l'outil natif ne sont configurés, ou pour une vérification scriptée ponctuelle. Les positions sont fichier:ligne:col (indexé à 1, octets UTF-8) ou fichier:#offset (indexé à 0). Voir references/cli.md.

Ordre de préférence : MCP → LSP natif → CLI. Les outils MCP correspondent à la façon de penser d'un agent (par nom/chemin, pas par position de curseur) ; l'outil natif ajoute des diagnostics automatiques gratuits ; le CLI est la solution de repli documentée en dernier recours. Configurez autant de méthodes que disponibles et laissez la tâche choisir l'outil — une requête pour laquelle vous avez déjà une ligne:col est peu coûteuse via LSP, une requête « où est X » est peu coûteuse via go_search, une vérification rapide non supervisée est peu coûteuse via le CLI.

Capacité → CLI → MCP → LSP natif

Correspondance complète de chaque capacité avec sa commande CLI, son outil MCP et son opération LSP native : references/matrix.md.

Cas d'utilisation

  • Navigation — sauter à une définition, une implémentation, ou tracer un graphe d'appels avant de toucher à du code que vous n'avez pas écrit. Détails : references/features.md.
  • Découverte de code — apprendre la forme d'un espace de travail (go_workspace), chercher flouement un symbole que vous ne pouvez pas placer exactement (go_search), ou lire la surface publique d'une dépendance (go_package_api) avant de l'utiliser.
  • Documentation — survol pour obtenir les infos de type/doc/taille, aide à la signature lors de l'appel d'une fonction, ou parcourir la documentation rendue d'un package (source.doc, y compris les packages internes que pkg.go.dev ne voit jamais).
  • Diagnostics et sécurité — erreurs du compilateur et de l'analyseur après chaque modification (go_diagnostics / automatique avec LSP), plus une vérification légère de l'accessibilité go_vulncheck : une fois en référence juste après la détection de l'espace de travail, et encore après tout changement de go.mod.
  • Formatage — formatage canonique équivalent à gofmt et organisation des imports, à la fois scriptables et pilotés par des actions de code.
  • Refactoring — renommage sécurisé (bloque un changement qui briserait la satisfaction d'interface), extraction/insertion, et toute la famille refactor.rewrite.* (remplir structure/switch, inverser if, diviser/joindre des lignes, supprimer un paramètre inutilisé, ajouter des tags de structure, implémenter une interface). Catalogue complet avec pièges : references/features.md.

Workflows efficaces

Ces workflows Lecture/Édition encodent l'ordre qui évite les requêtes redondantes et les modifications à moitié appliquées — traitez chaque étape comme requise, pas optionnelle, même pour économiser un aller-retour.

  • Début de session — appelez go_workspace une fois pour détecter si c'est un espace de travail Go ; si oui, suivez immédiatement avec un go_vulncheck de référence pour faire remonter les vulnérabilités déjà présentes dans l'espace de travail. Ceci est inconditionnel, séparé de la vérification ultérieure du workflow d'édition après un changement de dépendance.

Workflow de lecture (comprendre avant de toucher quoi que ce soit) :

  1. go_workspace — disposition (module/workspace/GOPATH) ; même appel que la vérification de début de session ci-dessus si elle n'a pas encore eu lieu.
  2. go_search — localiser flouement un type/fonction/variable par nom.
  3. go_file_context — juste après la lecture d'un fichier Go pour la première fois, voir ce qu'il importe du reste de son package ; ré-exécuter si les dépendances de ce fichier changent.
  4. go_package_api — la surface publique d'une dépendance tierce ou d'un package voisin, sans lire chaque fichier.

Workflow d'édition (itérer jusqu'à ce que les diagnostics soient propres) :

  1. Lecture d'abord (workflow ci-dessus).
  2. go_symbol_references avant de modifier toute définition — évaluer l'impact, puis lire chaque fichier référencant qui nécessite une modification correspondante.
  3. Effectuer toutes les modifications prévues, y compris les modifications sur les sites de référence, avant de passer à l'étape suivante.
  4. go_diagnostics sur chaque fichier modifié — obligatoire après chaque modification, pas une passe de nettoyage optionnelle.
  5. Corriger les erreurs signalées : examiner tout correctif rapide suggéré avant de l'appliquer, puis ré-exécuter les diagnostics pour confirmer que le correctif a bien été appliqué. Ignorer les diagnostics de type info/indice sans rapport avec la tâche. Un message de diagnostic peut paraphraser le code source environnant plutôt que de le citer textuellement.
  6. Seulement si les dépendances go.mod ont changé, exécuter go_vulncheck sur tout l'espace de travail — après que les diagnostics soient propres, pas avant.
  7. Exécuter go test <chemins-des-packages-modifiés> — pas ./... sauf demande explicite.

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 associés