pkg.go.dev 是 Go 语言官方维护的「包文档站」,可以理解成 Go 开源生态的官方黄页:一个开源模块是干嘛的、有哪些版本、包含哪些包,都能在这里查到。2026 年 5 月 21 日,Go 团队宣布为这个网站正式推出官方 API(应用程序编程接口,即程序之间约定的调用方式),程序和脚本从此可以直接发 HTTP 请求拿到包与模块的结构化元数据(描述数据的数据,比如包名、版本、简介),不用再靠爬网页解析 HTML 来获取——这个网页一改版就失效的脆弱方案可以被丢掉了。

这套 API 主要服务三类人:写 Go 开发工具和 IDE(集成开发环境)插件的开发者、维护依赖分析脚本的工程师,以及做 AI 辅助编程、需要给模型提供准确代码上下文的产品团队。它的核心价值是稳定:官方承诺保持向后兼容,现有集成不会被后续升级破坏。

接口的形态

先说明两个基础概念:包(package)是 Go 里组织代码的基本单元,是一组相关函数的集合;模块(module)是一组相关包的集合,带版本号一起发布。API 采用无状态、只读设计:无状态指每次请求互相独立,服务器不保存调用方的会话信息;只读指只能用 GET 方式查询数据,不能提交或修改任何内容。当前所有端点(endpoint,即 API 提供的查询入口)挂在 /v1beta 路径下,beta 期收集反馈、确认稳定后,会转为正式的 v1 版本。完整的接口契约以 OpenAPI 规范(一种机器可读的接口描述文件格式,工具可以直接读取它生成客户端代码)公开发布,地址是 https://pkg.go.dev/v1beta/openapi.yaml。

8 个核心端点

端点作用
/v1beta/package/{path}查询某个包的信息
/v1beta/module/{path}查询某个模块的信息
/v1beta/versions/{path}查询模块的全部版本
/v1beta/packages/{path}查询模块包含的所有包
/v1beta/search?q={query}按关键字搜索包
/v1beta/symbols/{path}列出包声明的符号(函数、类型等)
/v1beta/imported-by/{path}查哪些包引用了它
/v1beta/vulns/{path}查询模块或包的安全漏洞

举例:查询 go-cmp(Go 社区常用的测试比较库),请求 https://pkg.go.dev/v1beta/package/github.com/google/go-cmp/cmp,返回的 JSON(一种通用的结构化文本格式)里就包含模块路径、当前版本 v0.7.0、是否为最新版、包的简介等字段。

精确优先:歧义路径不猜,返回候选清单

网页版为了用户体验,遇到包路径同时在多个模块里存在时,会按「最长模块路径」规则自动推断你指的是哪个;但 API 采取「精确优先于方便」的原则:只要路径有歧义,API 就不替你做决定,而是返回候选列表并报错,要求你明确指定模块。对程序来说,确定性比省事更重要——猜错一次,整条自动化流水线就跑偏了。

version 参数:按版本或按分支查询

查询包、模块、符号信息时,可以用 version 参数指定版本:传语义版本号(如 ?version=v1.2.3,语义版本是形如「主版本.次版本.修订号」的规范版本号规则)查特定发布版;传分支名(如 ?version=master 或 ?version=main)查开发分支,API 会自动把分支解析成对应的伪版本号(一种由 Git 提交生成的临时版本号,形如 v0.7.1-0.20260310220054-34c9473539b8)。不传参数则默认返回最新发布版。自定义的任意分支名不支持。

官方命令行工具 pkgsite-cli

Go 团队还提供了一个参考实现——命令行工具 pkgsite-cli,代码在 golang/pkgsite 仓库里。安装只需一行:

go install golang.org/x/pkgsite/cmd/internal/pkgsite-cli@latest

它把上面 8 个端点封装成了直观的子命令:search 搜索包,package 查包详情,加 --imported-by 参数看谁引用了它,加 --symbols 参数看它声明了哪些符号,module -versions 列版本,module -packages 列包含的包。比如 pkgsite-cli package github.com/google/go-cmp/cmp 会输出模块路径、当前版本、简介;pkgsite-cli search "uuid" 会列出相关包及一句话简介。工具自动处理分页和排版,适合在终端里快速查证,也可以作为自己写集成时的参考样例。

稳定性承诺

官方明确表示:API 未来会持续扩展能力,但保持向后兼容,已有集成不会因升级而失效。需要提醒的是,pkgsite-cli 的命令行界面目前还不算稳定,接口可能会调整。

pkg.go.dev 官方 API 让「查询 Go 包信息」从爬网页变成了发一个 HTTP 请求,配合 pkgsite-cli,终端和脚本里都能稳定拿到包、模块、版本、漏洞等结构化数据——做 Go 工具与 AI 编程辅助的开发者值得第一时间接入。