Agent Skillssamber/cc-skills-golang › golang-gopls

golang-gopls

GitHub

基于 gopls 提供 Go 代码语义智能,支持跳转定义、查找引用、重构、格式化及诊断。适用于在本地构建环境中进行代码导航、依赖分析及安全重命名等开发任务。

skills/golang-gopls/SKILL.md samber/cc-skills-golang

Trigger Scenarios

需要跳转到 Go 代码定义 查找函数或变量的调用点 执行代码重构如提取/内联变量 运行代码诊断检查错误

Install

npx skills add samber/cc-skills-golang --skill golang-gopls -g -y
More Options

Use without installing

npx skills use samber/cc-skills-golang@golang-gopls

指定 Agent (Claude Code)

npx skills add samber/cc-skills-golang --skill golang-gopls -a claude-code -g -y

安装 repo 全部 skill

npx skills add samber/cc-skills-golang --all -g -y

预览 repo 内 skill

npx skills add samber/cc-skills-golang --list

SKILL.md

Frontmatter
{
    "name": "golang-gopls",
    "license": "MIT",
    "metadata": {
        "author": "samber",
        "version": "1.0.0",
        "openclaw": {
            "emoji": "🛰️",
            "install": [
                {
                    "bins": [
                        "gopls"
                    ],
                    "kind": "go",
                    "package": "golang.org\/x\/tools\/gopls@latest"
                }
            ],
            "homepage": "https:\/\/github.com\/samber\/cc-skills-golang",
            "requires": {
                "bins": [
                    "go",
                    "gopls"
                ]
            },
            "skill-library-version": "0.22.0"
        }
    },
    "description": "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`).",
    "allowed-tools": "Read Edit Write Glob Grep Bash(go:*) Bash(golangci-lint:*) Bash(git:*) Agent Bash(gopls:*) LSP mcp__gopls__*",
    "compatibility": "Designed for Claude Code or similar AI coding agents. Requires the gopls binary (go install golang.org\/x\/tools\/gopls@latest) v0.20+ on PATH.",
    "user-invocable": true
}

Persona: You are a Go engineer who reaches for semantic code intelligence instead of grep whenever a question is about the resolved build — grep finds text, gopls finds meaning (types, call graphs, shadowing, implementation relationships).

Dependencies: goplsgo install golang.org/x/tools/gopls@latest (v0.20+). The native LSP tool additionally needs ENABLE_LSP_TOOL=1 and the gopls-lsp@claude-plugins-official marketplace plugin (see references/mcp.md).

gopls is the official Go language server. It only answers questions about your specific, locally resolved build — your workspace plus every dependency exactly as pinned in go.sum, including replace directives. For a package that isn't part of that build (versions, docs, licenses, CVEs of something you haven't added yet), → See samber/cc-skills-golang@golang-pkg-go-dev skill (godig) instead.

Three ways to reach gopls

Not interchangeable — pick by what you already know and what you need back:

  • gopls's own MCP server (preferred for most tasks) — purpose-built for agents: tools take names, file paths, and fuzzy queries instead of raw cursor positions. Register once per machine: claude mcp add gopls -- gopls mcp. Runs headless over stdio, no editor attached, only sees files saved to disk — the right default for an agent-only workflow. See references/mcp.md for every tool.
  • The native LSP tool — Claude Code's built-in editor-style integration. Off by default: set ENABLE_LSP_TOOL=1, install gopls, and install the official gopls-lsp@claude-plugins-official marketplace plugin to wire it as the Go language server. Operations (goToDefinition, findReferences, hover, documentSymbol, workspaceSymbol, goToImplementation, call hierarchy) are keyed by line/character, so they're most useful once you already have a location — typically right after a grep or a read. Unique value: compiler diagnostics are pushed into context automatically after every edit, no explicit call needed.
  • The gopls CLI — same engine, invoked as gopls <command> <file:line:col>. The Go team documents it as experimental and debugging-only — "not efficient, complete, flexible, or officially supported." Use it when neither MCP nor the native tool is wired up, or for a one-shot scripted check. Positions are file:line:col (1-indexed, UTF-8 bytes) or file:#offset (0-indexed). See references/cli.md.

Preference order: MCP → native LSP → CLI. MCP tools match how an agent thinks (by name/path, not cursor position); the native tool adds free automatic diagnostics; the CLI is the documented fallback of last resort. Wire as many as are available and let the task pick the tool — a query you already have a line:col for is cheap via LSP, a "where is X" query is cheap via go_search, a quick unattended check is cheap via the CLI.

Capability → CLI → MCP → native LSP

Full mapping of every capability to its CLI command, MCP tool, and native LSP op: references/matrix.md.

Use cases

  • Navigation — jump to a definition, an implementation, or trace a call graph before touching code you didn't write. Details: references/features.md.
  • Code discovery — learn a workspace's shape (go_workspace), fuzzy-search a symbol you can't place exactly (go_search), or read a dependency's public surface (go_package_api) before using it.
  • Documentation — hover for type/doc/size info, signature help while calling a function, or browse rendered package docs (source.doc, including internal packages pkg.go.dev never sees).
  • Diagnostics & safety — compiler and analyzer errors after every edit (go_diagnostics / automatic with LSP), plus a lightweight go_vulncheck reachability check: once as a baseline right after detecting the workspace, and again after any go.mod change.
  • Formatting — canonical gofmt-equivalent formatting and import organization, both scriptable and code-action-driven.
  • Refactoring — safe rename (blocks a change that would break interface satisfaction), extract/inline, and the full refactor.rewrite.* family (fill struct/switch, invert if, split/join lines, remove unused parameter, add struct tags, implement interface). Full catalog with gotchas: references/features.md.

Efficient workflows

These Read/Edit workflows encode the order that avoids redundant queries and half-applied edits — treat every step as required, not optional, even to save a round trip.

  • Session start — call go_workspace once to detect whether this is a Go workspace at all; if it is, immediately follow with a baseline go_vulncheck to surface vulnerabilities the workspace already carries. This is unconditional, separate from the edit workflow's later check after a dependency change.

Read workflow (understand before touching anything):

  1. go_workspace — layout (module/workspace/GOPATH); same call as the session-start check above if it hasn't run yet.
  2. go_search — fuzzy-locate a type/function/variable by name.
  3. go_file_context — right after reading any Go file for the first time, see what it pulls in from the rest of its package; re-run if that file's dependencies change.
  4. go_package_api — a third-party dependency's or sibling package's public surface, without reading every file.

Edit workflow (iterate until diagnostics are clean):

  1. Read first (workflow above).
  2. go_symbol_references before modifying any definition — judge the blast radius, then read every referencing file that needs a matching edit.
  3. Make all planned edits, including the reference-site edits, before moving on.
  4. go_diagnostics on every changed file — mandatory after each modification, not an optional cleanup pass.
  5. Fix reported errors: review any suggested quick-fix diff before applying, then re-run diagnostics to confirm the fix landed. Ignore hint/info diagnostics unrelated to the task. A diagnostic message can paraphrase the surrounding source rather than quote it verbatim.
  6. Only if go.mod dependencies changed, run go_vulncheck on the whole workspace — after diagnostics are clean, not before.
  7. Run go test <changed-package-paths> — not ./... unless explicitly asked, since a full-repo run slows the iteration loop.

Gotchas worth knowing before you rely on a result:

  • references results only reflect the build configuration of the queried file — a query on foo_windows.go will not surface matches in bar_linux.go; re-run under the relevant GOOS/build tags if a cross-platform result is missing.
  • call_hierarchy only shows static calls — calls through function values or interface methods are invisible to it; corroborate with references when the call site matters.
  • Extract/inline refactors are less rigorous than rename: comments are sometimes dropped, and generated files marked DO NOT EDIT receive no code actions at all.
  • refactor.rewrite.fillStruct searches only the current file above the cursor and needs the struct's package already imported — run source.organizeImports first if the type was just typed in.

gopls vs godig vs Context7 vs govulncheck

gopls only reasons about code present and resolvable in the local build:

  • For anything not tied to that build (version history, license, ecosystem-wide importers, CVEs of a package not yet added) → See samber/cc-skills-golang@golang-pkg-go-dev skill (godig) — it queries pkg.go.dev directly, no local checkout needed.
  • For a comprehensive, whole-tree vulnerability audit (CI gates, periodic sweeps) rather than gopls's lightweight on-demand go_vulncheck → See samber/cc-skills-golang@golang-security skill (govulncheck).
  • Context7 remains a fallback for non-Go docs or a Go module not indexed on pkg.go.dev.

The full task-to-tool matrix lives in the samber/cc-skills-golang@golang-how-to skill's "godig vs gopls vs Context7 vs govulncheck" section.

Version History

  • 709b181 Current 2026-07-25 07:35

Same Skill Collection

skills/golang-code-style/SKILL.md
skills/golang-concurrency/SKILL.md
skills/golang-context/SKILL.md
skills/golang-data-structures/SKILL.md
skills/golang-database/SKILL.md
skills/golang-dependency-management/SKILL.md
skills/golang-design-patterns/SKILL.md
skills/golang-documentation/SKILL.md
skills/golang-graphql/SKILL.md
skills/golang-grpc/SKILL.md
skills/golang-lint/SKILL.md
skills/golang-modernize/SKILL.md
skills/golang-popular-libraries/SKILL.md
skills/golang-project-layout/SKILL.md
skills/golang-safety/SKILL.md
skills/golang-samber-do/SKILL.md
skills/golang-samber-hot/SKILL.md
skills/golang-samber-mo/SKILL.md
skills/golang-samber-oops/SKILL.md
skills/golang-samber-slog/SKILL.md
skills/golang-security/SKILL.md
skills/golang-stay-updated/SKILL.md
skills/golang-stretchr-testify/SKILL.md
skills/golang-uber-dig/SKILL.md
skills/golang-uber-fx/SKILL.md
skills/golang-benchmark/SKILL.md
skills/golang-cli/SKILL.md
skills/golang-continuous-integration/SKILL.md
skills/golang-dependency-injection/SKILL.md
skills/golang-error-handling/SKILL.md
skills/golang-google-wire/SKILL.md
skills/golang-how-to/SKILL.md
skills/golang-naming/SKILL.md
skills/golang-observability/SKILL.md
skills/golang-performance/SKILL.md
skills/golang-pkg-go-dev/SKILL.md
skills/golang-refactoring/SKILL.md
skills/golang-samber-lo/SKILL.md
skills/golang-samber-ro/SKILL.md
skills/golang-spf13-cobra/SKILL.md
skills/golang-spf13-viper/SKILL.md
skills/golang-structs-interfaces/SKILL.md
skills/golang-swagger/SKILL.md
skills/golang-testing/SKILL.md
skills/golang-troubleshooting/SKILL.md

Metadata

Files
0
Version
30cdf15
Hash
0283f7d2
Indexed
2026-07-25 07:35

inicio - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-08-21 04:04
浙ICP备14020137号-1 $mapa de visitantes$