关于 golang-pkg-go-dev
为 Go 开发者提供 godig 使用指南,用于查询 pkg.go.dev 上的包与模块文档、符号、版本、导入者和已知漏洞。godig 可作为只读 CLI 或 MCP 服务运行,无需认证。
主要功能
- 01查询包和模块元数据
- 02查看文档、符号及示例
- 03检索版本与导入者
- 04查询已知漏洞和许可证
- 05以 CLI 或 MCP 服务运行
适用场景
- 01评估尚未加入 go.mod 的依赖
- 02检查 Go 包的版本与文档
- 03查询依赖的已知漏洞和导入者
MCP 相关
godig 可作为 MCP 服务运行,通过匹配 CLI 命令的数据操作向 MCP 客户端提供 pkg.go.dev 查询。支持 stdio 和 streamable HTTP 传输。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ samber/ cc-skills-golang --skill golang-pkg-go-dev安装后在 Claude Code 中输入/golang-pkg-go-dev确认已加载。
附带文件references/sample-output.md
详细介绍
golang-pkg-go-dev
依赖项: godig — go install github.com/samber/godig/cmd/godig@latest(或使用已注册的 godig MCP 服务/托管实例)。
godig 会查询 pkg.go.dev API。使用它来回答有关 Go 包和模块的问题:文档、符号、版本、导入方和漏洞。它既可作为 CLI 使用,也可作为 MCP 服务使用;所有操作均为只读,且无需身份验证。
何时使用此技能
遇到以下问题时触发:
- “有哪些版本的 github.com/samber/lo 可用?”
- “golang.org/x/text 是否存在已知漏洞?”
- “显示包 X 的文档/符号。”
- “哪些包导入了 X?”
- “搜索包含 Y 的 Go 包。”
如何在 godig、gopls、Context7 和 govulncheck 之间选择
简而言之:godig 用于回答有关已发布生态系统的问题(即使包尚未出现在你的 go.mod 中也可使用);gopls 用于分析本地解析的构建(go.sum,包括被 replace 替换的分支);Context7 是非 Go 或未编入索引的文档的备用选择;govulncheck 用于对整个代码树进行漏洞审计(→ samber/cc-skills-golang@golang-security)。有关如何将 gopls(MCP 服务、原生 LSP 工具和 CLI)接入 Claude Code,请参阅 samber/cc-skills-golang@golang-gopls 技能;有关完整的任务到工具对照表,请参阅 samber/cc-skills-golang@golang-how-to 技能中的“godig vs gopls vs Context7 vs govulncheck”部分。
设置
安装
go install github.com/samber/godig/cmd/godig@latest
注册 MCP 服务(可选)
godig mcp 默认通过 stdio 运行,也可使用 --transport http 通过 streamable HTTP 运行。该命令与宿主无关,任何支持 MCP 的宿主都可以调用它。Claude Code 通过自己的 CLI 注册该服务:
stdio(客户端按需启动 godig):
claude mcp add pkg-go-dev -- godig mcp
streamable HTTP(位于 /mcp 的共享服务,默认 :8080):
godig mcp --transport http --addr :8080
claude mcp add --transport http pkg-go-dev http://localhost:8080/mcp
托管实例(无需安装)——公共服务运行在 https://godig.samber.dev/mcp:
claude mcp add --transport http pkg-go-dev https://godig.samber.dev/mcp
其他支持 MCP 的宿主(Cursor、Windsurf 等)各自都有 MCP 服务注册方式——在各自的设置文件中添加条目,指向同一个 godig mcp 命令或托管 URL;它们没有通用的共享配置格式。
CLI 和 MCP 服务以相同的名称提供相同的操作。安装了 godig 时优先使用 CLI;未安装时,可将托管实例作为备用选择。
命令
全局标志(适用于所有命令): -o/--output table|json|raw|md(默认值为 table — 聊天时传入 -o md)、--base-url(pkg.go.dev API)、--vuln-base-url(Go 漏洞数据库,供 vulns 和 overview 查询)、--timeout、--log-level debug|info|warn|error|off。所有标志也可通过 GODIG_* 环境变量设置。
| 命令 | 参数 | 专用标志 | 用途 |
|---|---|---|---|
overview | <path> | --version | 简要概览(元数据、版本、许可证、漏洞)— 从这里开始 |
search | <query> | --symbol --limit --filter | 查找包(可选按导出符号筛选) |
package info | <path> | --module --version | 包元数据 |
package imports | <path> | --module --version | 此包导入的包(纯列表) |
package doc | <path> | --module --version --goos --goarch --format md|text|html|markdown | 完整的包文档(内容较多) |
package examples | <path> | --module --version --goos --goarch --symbol | 可运行的示例(内容较多;使用 --symbol 限定范围) |
package licenses | <path> | --module --version | 许可证文件及其完整文本(内容较多) |
symbol doc | <path> <symbol> | --module --version --goos --goarch | 单个符号的签名和文档(节省令牌) |
symbol examples | <path> <symbol> | --module --version --goos --goarch | 单个符号的可运行示例 |
symbols | <path> | --module --version --goos --goarch --limit --filter | 列出导出的符号 |
module info | <path> | --version | 模块元数据 |
module licenses | <path> | --version | 模块许可证文件(内容较多) |
module readme | <path> | --version | 模块 README,完整 Markdown(内容较多) |
dependencies | <path> | --version | go.mod 依赖项:requires / replaces / excludes / go 指令 |
packages | <path> | --version --limit --filter | 模块包含的包 |
versions | <path> | --limit --filter | 所有版本,按从新到旧排序 |
major-versions | <path> | --limit --filter --exclude-pseudo | 作为独立模块存在的主版本(v1、v2……) |
imported-by | <path> | --module --version --limit --filter | 导入此包的包 |
vulns | <path> | --version --limit | 已知漏洞(来自 Go 漏洞数据库) |
mcp | — | --transport stdio|http --addr --cache-ttl --cache-size | 作为 MCP 服务运行 |
version | — | — | 输出 godig 版本、提交版本和构建日期 |
当 godig 作为 MCP 服务运行时,上述每个数据命令都会作为同名操作提供。
退出代码: 0 表示成功,1 表示运行时错误(网络错误、未找到包),2 表示用法错误 — 参数或标志缺失或无效(例如,--limit 为非正数),或命令组未指定子命令(godig package)。检查是否返回 2,以区分格式错误的调用和查询失败。
所有命令的完整 -o md 输出见:sample-output.md。
提示
- 从
overview开始 — 一次调用即可返回精简摘要(元数据、最新版本及近期版本、许可证类型、漏洞)。只有需要完整文本时,才使用doc/examples/module readme/licenses(内容较大)。 - 始终传入
-o md,让结果以 Markdown(表格,或原始文档/README)形式呈现在聊天中。也有其他格式(默认table、json、raw),但这里优先使用md。 <path>是完整导入路径,例如github.com/samber/lo— 将其作为位置参数传入。--version指定特定模块版本(v1.5.0、latest、master、main);--module用于区分包所属的模块。--filter使用 Go 布尔表达式在服务端缩小列表结果范围 — 请参见筛选语法。--goos/--goarch设置文档/符号的构建上下文(例如linux/amd64)。- 如果只需要一个符号,优先使用
symbol doc/symbol examples,而不是针对整个包的package doc/package examples— 这样能大幅减少令牌用量。 - 并行执行互不依赖的查询 — 每条命令都是独立的只读 HTTP 查询,因此调用之间互不依赖。如果任务需要查询多个符号、包或模块的文档、示例、版本或漏洞,请一次性发起所有调用(在同一轮中多次调用
godig),而不要逐一执行 — 总耗时会从延迟之和降至最慢的一次调用耗时。对于大量并发查询(为许多符号编写文档、比较多个候选库、审计一组依赖中的 CVE),最多可调度 5 个并行子 Agent,让每个 Agent 自行运行godig调用并返回精简摘要,避免原始的大量输出进入主上下文。 - 列表命令会自动分页(返回所有结果);使用
--limit限制结果数量。
筛选语法
--filter(用于 search、versions、major-versions、packages、imported-by、symbols)接受一个在服务端对每个结果项求值的 Go 布尔表达式。它不是正则表达式 — 在 shell 中,需用单引号括住整个表达式。
- 标识符是结果项的字段,不同命令的字段也不同 — 某个列表中有效的字段在另一个列表中可能会被拒绝(例如
search提供packagePath,而不是path)。未知字段会报错undefined identifier: <name>(HTTP 400),并指出有问题的字段。字段使用结果项的小写 JSON 键;类似枚举值的字段(如kind)例外,需使用首字母大写的值(Function,而不是func)。 - 运算符:
==!=<<=>>=,布尔运算符&&||!,以及用于分组的括号。 - 字符串函数:
contains(s, sub)、hasPrefix(s, pre)、hasSuffix(s, suf)。 - 字面量:双引号字符串(
"Function")、true/false、数字。
各命令支持筛选的字段(字符串类型,除非另有说明):
| 命令 | 字段 |
|---|---|
search | modulePath、packagePath、synopsis、version |
versions | version、modulePath、deprecated(布尔值)、retracted(布尔值)、hasGoMod(布尔值)、commitTime |
packages | path、name、synopsis、isRedistributable(布尔值) |
imported-by | path(导入该包的包路径) |
symbols | name、kind(Function/Method/Type/Variable/Constant)、synopsis、parent |
major-versions | modulePath、major、version、isLatest(布尔值) |
godig symbols github.com/samber/lo --filter 'kind=="Function"' -o md
godig symbols github.com/samber/lo --filter 'kind=="Function" && hasPrefix(name,"Map")' -o md
godig versions github.com/samber/lo --filter 'hasPrefix(version,"v1.5")' -o md
godig versions github.com/samber/lo --filter 'deprecated==false && retracted==false' -o md
godig search "result option" --filter 'hasPrefix(packagePath,"github.com/samber/")' -o md
示例
始终请求 Markdown 输出(-o md):
# Overview — start here (compact, one call)
godig overview github.com/samber/ro -o md
# Search
godig search "result option monad" --limit 5 -o md
# Package facets
godig package info github.com/samber/ro -o md
godig package imports github.com/samber/ro -o md
godig package doc github.com/samber/ro --format md -o md
godig package examples github.com/samber/ro --symbol Map -o md
godig package licenses github.com/samber/ro -o md
# Single symbol (token-efficient vs package-wide doc/examples)
godig symbol doc github.com/samber/lo Map -o md
godig symbol examples github.com/samber/oops OopsError.Error -o md
# Module facets
godig module info github.com/samber/ro -o md
godig module readme github.com/samber/ro -o raw
godig dependencies github.com/samber/ro -o md
# Lists (auto-paginated; --limit to cap)
godig versions github.com/samber/ro -o md
godig major-versions github.com/samber/lo -o md
godig packages github.com/samber/ro -o md
godig imported-by github.com/samber/ro --limit 20 -o md
godig symbols github.com/samber/ro --filter 'kind=="Function"' -o md
# Pin a version / set the build context
godig versions github.com/samber/ro --filter 'hasPrefix(version,"v0.3")' -o md
godig package doc github.com/samber/lo --version v1.50.0 -o md
godig symbols github.com/samber/ro --goos linux --goarch amd64 -o md
# Vulnerabilities
godig vulns github.com/samber/ro -o md
此技能并未涵盖所有内容。godig --help 和各子命令的 --help 会列出当前标志和输出格式;其中的数据与 pkg.go.dev 所公开的信息一致。
如果你在 godig 中遇到错误或意外行为,请在 https://github.com/samber/godig/issues 提交问题。