
go 本身不提供传统意义上的“已安装包”全局清单,但可通过 `go list` 命令高效枚举工作区或标准库中的所有可构建包,支持递归遍历、依赖查看及自定义格式输出。
在 Go 生态中,并不存在类似 npm ls 或 pip list 的单一命令来显示“全局已安装第三方包”的完整列表——这是因为 Go(尤其在模块模式前)采用基于工作区(GOPATH)的源码管理机制,而非中心化二进制包仓库。自 Go 1.11 引入 Go Modules 后,依赖以 vendor/ 或模块缓存形式存在,但 go list 仍是查询当前可解析、可构建的 Go 包集合最权威、最灵活的工具。
✅ 基础用法:列出当前工作区所有包
进入你的 Go 工作区根目录(如 $GOPATH/src 或任意启用了 Go Modules 的项目根目录),执行:
go list ./...
- ./ 表示从当前目录开始;
- ... 是通配符,代表递归匹配所有子目录下的合法 Go 包(即包含 .go 文件且能成功 go build 的目录)。
该命令将输出所有可识别的包导入路径(如 fmt、github.com/gorilla/mux、myproject/internal/handler 等),是日常开发中检查本地包结构的首选方式。
? 列出全部可用包(含标准库)
在任意目录下运行:
go list ...
此命令会列出 Go 安装中所有可访问的包,包括:
- 标准库包(如 net/http, encoding/json);
- $GOROOT/src 下的官方包;
- $GOPATH/src 中的本地包;
- Go Modules 缓存中的依赖包(只要其路径可被 go list 解析)。
⚠️ 注意:该输出可能非常长(数百至上千行),建议配合 grep 过滤,例如 go list ... | grep -i "json"。
这是一套由淘掌门(taozhangmen.net)衍生出来的一个拍拍客系统!这套程序也继承了淘掌门的特点:永久免费开源!无任何时间限制、功能限制、域名限制。 程序相对于淘掌门原型,已去除返利、会员系统、文章系统等。 如果需要文章,可单独下载其他的文章系统,做子目录,效果可能会更好。 程序安装过程与淘掌门相同: 下载上传到空间,执行 你的网址/install.php 安装完成后,登陆后台修改拍拍AP
? 查看包依赖关系
若需分析包间的引用关系,go list 支持模板化输出,通过 -f 参数传入 Go text/template 格式字符串:
-
查看每个包直接导入的依赖(非递归):
go list -f '{{.ImportPath}} → {{.Imports}}' ./... -
查看每个包的全部传递依赖(递归展开,含间接依赖):
go list -f '{{.ImportPath}} → {{.Deps}}' ./...? 提示:.Deps 输出的是完整依赖图(去重后),常用于构建分析或依赖审计;但数据量大,建议定向查询单个包,如 go list -f '{{.Deps}}' net/http。
⚠️ 重要注意事项
- go list 不区分“已安装”与“仅存在源码”——它只报告当前环境能成功解析和加载的包路径,不涉及二进制安装状态(Go 包无 runtime “安装”概念,编译时按需链接)。
- 在 Go Modules 模式下(go.mod 存在),./... 默认作用于模块内所有子目录;若需包含 vendor/ 中的包,确保 GOFLAGS="-mod=vendor" 已设置。
- go list 不等同于 go mod graph 或 go mod vendor:前者面向包发现,后者面向依赖图可视化或离线分发。
- 要检查模块版本是否过期(类似 npm outdated),应使用 go list -u -m -f '{{.Path}}: {{.Version}} → {{.Latest}}' all。
总之,go list 是 Go 开发者理解项目结构、调试导入问题、自动化脚本集成的核心命令。掌握其通配规则与模板语法,即可高效驾驭 Go 的包组织体系。









