0

0

Golang go list命令详解_查询模块信息与依赖列表的利器

P粉602998670

P粉602998670

发布时间:2026-02-20 17:02:02

|

768人浏览过

|

来源于php中文网

原创

go list -m 用于查询模块元信息,如版本号、replace 后路径;-deps 列出构建依赖的包;-f 支持模板定制输出;需区分模块与包、构建上下文与 module graph。

golang go list命令详解_查询模块信息与依赖列表的利器

go list -m:查当前模块或依赖模块的元信息

想看自己项目用的是哪个版本的 github.com/gin-gonic/gin,或者确认 go.mod 里写的 latest 最终解析成了什么版本?直接跑:

go list -m github.com/gin-gonic/gin
它会输出类似 github.com/gin-gonic/gin v1.9.1。注意加 -m 才查模块,不加默认查包(package),容易跑偏。

常见错误是漏掉 -m 还硬查远程路径,结果报错:no matching packages in workspace——因为 go list 默认只找本地能 import 的包路径,不是所有字符串都能当包名。

  • -m 模式下支持通配符,比如 go list -m gopkg.in/yaml*
  • -f '{{.Version}}' 可提取纯版本号,适合脚本调用
  • 如果模块被 replace 过,go list -m 显示的是 replace 后的路径和版本,不是原始声明

go list -deps:一次性拉出完整依赖树

要审计依赖、排查间接引入的旧版 golang.org/x/net,用 go list -deps 比手动翻 go.mod 靠谱得多。它从当前目录的 main 包出发,递归列出所有实际参与构建的包(含间接依赖):

go list -deps ./...

但要注意:它列的是「包」,不是「模块」。同一个模块(如 github.com/spf13/cobra)可能有几十个子包,全打出来很冗长。真正想看模块层级关系,得配合 -f 模板过滤:

立即学习go语言免费学习笔记(深入)”;

MedPeer
MedPeer

AI驱动的一站式科研服务平台

下载
go list -m -deps all | grep -v 'indirect' | sort -u
  • all 是特殊模式,代表整个 module graph,但只在 module-aware 模式下有效(即项目有 go.mod
  • 不加 -json 时输出是纯文本,字段间靠空格分隔,解析需谨慎;建议脚本中优先用 -json + jq
  • 如果项目用了 //go:build 条件编译,-deps 只包含当前构建 tag 下实际加载的包,不是全集

go list -f 的模板语法:避开字符串拼接陷阱

-fgo list 最灵活也最容易写崩的部分。比如想同时看包名和导入路径,写成 -f '{{.ImportPath}} {{.Name}}' 看似合理,但一旦遇到 internal 包或 vendor 路径,.Name 可能为空,导致输出错位。

更稳的做法是显式判断:

go list -f '{{if .Name}}{{.Name}}{{else}}[no name]{{end}}: {{.ImportPath}}' ./...
  • .Dir 返回包所在绝对路径,.ImportPath 是逻辑导入路径,二者常不一致(尤其 vendor 或 replace 场景)
  • 模板里不能调用函数(如 lensplit),只能用内置动作(if/range/with)和字段访问
  • 想导出 JSON 格式直接用 -json,别硬套 -f 拼 JSON 字符串,引号和转义容易出错

go list 在 CI/CD 中的典型误用

有人想在 CI 里用 go list -m -json all 提取所有模块版本做安全扫描,结果发现输出里混进了 stdcmd 模块(如 stdcmd/go),根本不是项目依赖。

这是因为 all 包含了 Go 工具链自身模块,而 go list -mstd 的处理是特殊的——它不走 go.mod 解析,而是硬编码返回空版本。这类模块既不能升级,也不该进 SBOM。

  • 生产环境推荐过滤掉 stdcmd 前缀:go list -m -json all | jq 'select(.Path | startswith("std") or startswith("cmd")) | not'
  • 跨 Go 版本运行时,go list -m all 输出结构可能微变(如新增 Indirect 字段),脚本要做兼容性兜底
  • 在 GOPATH 模式下执行 go list -m 会报错,必须确保 GO111MODULE=on 或项目根目录存在 go.mod

真正难的不是命令怎么敲,而是搞清你问的是「模块」还是「包」,是在构建上下文里查,还是在 module graph 里查——这两个视角下的结果可能完全不同。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
golang如何定义变量
golang如何定义变量

golang定义变量的方法:1、声明变量并赋予初始值“var age int =值”;2、声明变量但不赋初始值“var age int”;3、使用短变量声明“age :=值”等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

207

2024.02.23

golang有哪些数据转换方法
golang有哪些数据转换方法

golang数据转换方法:1、类型转换操作符;2、类型断言;3、字符串和数字之间的转换;4、JSON序列化和反序列化;5、使用标准库进行数据转换;6、使用第三方库进行数据转换;7、自定义数据转换函数。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

239

2024.02.23

golang常用库有哪些
golang常用库有哪些

golang常用库有:1、标准库;2、字符串处理库;3、网络库;4、加密库;5、压缩库;6、xml和json解析库;7、日期和时间库;8、数据库操作库;9、文件操作库;10、图像处理库。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

348

2024.02.23

golang和python的区别是什么
golang和python的区别是什么

golang和python的区别是:1、golang是一种编译型语言,而python是一种解释型语言;2、golang天生支持并发编程,而python对并发与并行的支持相对较弱等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

212

2024.03.05

golang是免费的吗
golang是免费的吗

golang是免费的。golang是google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的开源编程语言,采用bsd开源协议。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

403

2024.05.21

golang结构体相关大全
golang结构体相关大全

本专题整合了golang结构体相关大全,想了解更多内容,请阅读专题下面的文章。

344

2025.06.09

golang相关判断方法
golang相关判断方法

本专题整合了golang相关判断方法,想了解更详细的相关内容,请阅读下面的文章。

197

2025.06.10

golang数组使用方法
golang数组使用方法

本专题整合了golang数组用法,想了解更多的相关内容,请阅读专题下面的文章。

990

2025.06.17

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

776

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go 教程
Go 教程

共32课时 | 5.3万人学习

Go语言实战之 GraphQL
Go语言实战之 GraphQL

共10课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号