news 2026/10/1 14:50:34

go list command

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
go list command

文章目录

  • 1.简介
  • 2.基本语法
    • 2.1 格式
    • 2.2 常用包路径写法
    • 2.3 默认输出
    • 2.4 结构化输出
    • 2.5 模块模式格式
  • 3. 选项
    • 3.1 输出控制
    • 3.2 范围控制
    • 3.3 模块模式
    • 3.4 常用模板字段
  • 4. 示例
  • 5. 常见问题
    • 5.1 `./...` 与 `...` 有什么区别?
    • 5.2 模板中的 `{{}}` 需要转义吗?
    • 5.3 `-e` 会掩盖真正的错误吗?
    • 5.4 如何只查看某个包的直接依赖?
  • 6. 小结
  • 参考文献

1.简介

go list的核心作用是以可编程的方式输出 Go 包和模块的信息。

它的典型用途包括:

  • 确认某个包是否存在
  • 列出项目的所有依赖
  • 查看依赖是否有可用更新
  • 导出包或模块的元数据供脚本处理

与go build、go run不同,go list不编译代码,只做解析和查询,因此速度极快,非常适合嵌入脚本或 CI 流程。

go list有两种工作模式:

模式触发方式操作对象
包模式默认包(package)
模块模式加-m模块(module)

2.基本语法

2.1 格式

go list[-f format][-json][-m][list flags][build flags][packages]

不带参数时,go list列出当前目录的包信息。

2.2 常用包路径写法

写法含义
go list当前目录的包
go list ./...当前项目及所有子目录的包
go list ...工作区所有包
go list hash标准库hash包
go list github.com/gin-gonic/gin外部包

2.3 默认输出

最简单的输出是导入路径:

$ go list github.com/gin-gonic/gin github.com/gin-gonic/gin

2.4 结构化输出

go list的真正价值在于结构化输出,有两种方式:

JSON 格式:

go list-jsonhash

输出包的所有元数据,包括Dir、ImportPath、Name、GoFiles、Imports、Deps、Doc等字段。

Go 模板格式:

go list-f'{{.ImportPath}}: {{.Dir}}'hash

输出:

hash: /usr/local/go/src/hash

2.5 模块模式格式

加-m后,操作对象变为模块:

go list-mall# 列出所有模块go list-m-jsongin# 以 JSON 输出某模块信息

3. 选项

3.1 输出控制

选项作用
-json以 JSON 格式输出
-f用 Go 模板自定义输出格式

3.2 范围控制

选项作用
-deps同时列出所有依赖
-test包含测试相关文件信息
-e遇到错误也继续处理,不中断

3.3 模块模式

选项作用
-m切换到模块模式
-u配合-m,检查可用更新
-versions配合-m,列出所有可用版本

3.4 常用模板字段

字段含义
{{.ImportPath}}导入路径
{{.Name}}包名
{{.Dir}}包所在目录
{{.GoFiles}}Go 源文件列表
{{.Imports}}直接依赖
{{.Deps}}所有依赖(含间接)

各选项的具体用法与组合方式,见第 4 章示例。
|{{.Doc}}| 包文档摘要 |

join是 Go 模板内置函数,用于把切片拼成字符串,例如{{join .Deps "\n"}}。

4. 示例

(1)确认包是否存在。

go list github.com/go-sql-driver/mysql

存在则输出导入路径,不存在则报错。

在脚本中判断:

ifgo list github.com/foo/bar>/dev/null2>&1;thenecho"包存在"elseecho"包不存在"fi

(2)查看模块的可用版本列表。

go list-m-versions<mod-path>

比如查看 gin 框架的可用版本。

go list-m-versionsgithub.com/gin-gonic/gin github.com/gin-gonic/gin v1.1.1 v1.1.2 v1.1.3 v1.1.4 v1.3.0 v1.4.0 v1.5.0 v1.6.0 v1.6.1 v1.6.2 v1.6.3 v1.7.0 v1.7.1 v1.7.2 v1.7.3 v1.7.4 v1.7.5 v1.7.6 v1.7.7 v1.8.0 v1.8.1 v1.8.2 v1.9.0 v1.9.1 v1.10.0 v1.10.1 v1.11.0 v1.12.0

(3)列出项目的所有直接依赖。

go list-f'{{join .Imports "\n"}}'./...|sort-u

(4)列出某个包的所有依赖。

go list-f'{{join .Deps "\n"}}'hash

(5)导出依赖树为 JSON。

go list-json-deps./...>deps.json

后续可用jq等工具分析。

(6)列出所有模块

go list-mall

列出所有模块指的是列出当前项目的主模块,以及它依赖的所有模块(包括直接依赖和间接依赖)。

这里的-m是关键:它把 go list 的操作对象从“包(package)”切换成“模块(module)”。all 则是一个特殊模式,表示“主模块 + 全部依赖模块”。

(7)检查依赖更新

go list-m-uall

输出中会标注可用更新:

github.com/gin-gonic/gin v1.10.0 [v1.10.1]

(8)格式化输出依赖更新。

go list-m-u-f'{{.Path}} {{.Version}} -> {{.Update.Version}}'all

输出:

github.com/gin-gonic/gin v1.10.0 -> v1.10.1

(9)查看某模块的详细信息

go list-m-jsongithub.com/gin-gonic/gin

输出模块的Path、Version、Time、Dir、GoMod等字段。

(10)找出依赖了某个包的所有包

go list-f'{{.ImportPath}} {{join .Deps " "}}'./...|grep"golang.org/x/sync"

(11)宽容模式处理错误

go list-e-json./...

5. 常见问题

5.1./...与...有什么区别?

  • ./...匹配当前目录及其子目录下的包;
  • ...匹配当前工作区(workspace)内的所有包,范围更大。

在单模块项目中两者通常等价,但在多模块工作区中差异明显,建议按需选择。

5.2 模板中的{{}}需要转义吗?

在 shell 中直接使用-f '{{.ImportPath}}'时,单引号可避免 shell 展开。若在脚本中拼接模板,注意$等字符的转义。

5.3-e会掩盖真正的错误吗?

-e让go list遇到无法解析的包时继续输出,适合排查不稳定项目。但正常开发中建议先去掉-e,让错误直接暴露,便于定位问题。

5.4 如何只查看某个包的直接依赖?

用{{.Imports}}(直接依赖)而非{{.Deps}}(含间接依赖),例如:

go list-f'{{join .Imports "\n"}}'hash

6. 小结

go list的核心价值是把 Go 的包和模块信息变成可编程的数据:

  • 包模式:go list <pkg>查询包信息,配合-json或-f输出结构化数据
  • 模块模式:go list -m切换视角,管理依赖、检查更新
  • 脚本友好:配合grep、jq、sort做自动化分析
  • 不编译代码:只解析元数据,速度快,适合 CI 和脚本

掌握go list,你就能用命令行快速回答“这个包在哪”“依赖了什么”“有没有更新”等问题,无需打开 IDE 或手动翻go.mod。


参考文献

  • Go 官方文档:go list
  • Go Modules Reference
  • pkg.go.dev 包查询
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/1 14:50:00

LeetCode 206反转链表:迭代与递归的面试实战解析

“这道题我昨晚刚背完&#xff0c;今天一紧张还是写错了”——这是我在几次模拟面试里真实见过的反转链表翻车现场。 你搜“算法面试必刷”时&#xff0c;206. 反转链表绝对是被列在榜首的那一档。它是LeetCode上入门级的链表题&#xff0c;却成了无数人挂在面试第一轮的高频题…

作者头像 李华
网站建设 2026/10/1 14:49:56

深度学习增强的数据级多源融合定位:应对RTK信号退化

简介&#xff1a;一份面向定位算法、信号处理与深度学习交叉领域研究者的学术文献&#xff0c;聚焦解决不同定位体制下多系统协同定位能力不足的问题。其中提出基于深度学习的数据级多源融合定位增强方法&#xff0c;以空间关联行为更丰富的二阶特征矩阵作为网络输入&#xff0…

作者头像 李华
网站建设 2026/10/1 14:49:38

Arch 下 GNOME 扩展报错:缺少 gnome-browser-connector

用 Arch Linux 装 GNOME 扩展时&#xff0c;页面上开关一拨&#xff0c;直接弹出一个让人摸不着头脑的英文报错&#xff1a; No such native application org.gnome.chrome_gnome_shell 。我第一次碰到时一度以为 GNOME Shell 崩了&#xff0c;后来才发现&#xff0c;这句报错…

作者头像 李华
网站建设 2026/10/1 14:49:19

PLC结构化编程实战:用FB功能块与状态机告别老式梯形图

做泸州这一带的工控项目&#xff0c;我打交道最多的就是酒厂灌装线、化工厂的辅机控制、非标装配设备这些场景。说实话&#xff0c;很多同行梯形图画得很溜&#xff0c;什么自锁互锁、定时器计数器&#xff0c;信手拈来。但你要是问他PLC结构化编程怎么落地&#xff0c;十有八九…

作者头像 李华
网站建设 2026/10/1 14:48:57

AI工业控制系统落地指南:架构设计、选型与实战部署

1. 2026年AI工业控制系统整体架构设计思路1.1 为什么要重新思考AI与工业控制的融合方式2026年谈AI工业控制系统&#xff0c;已经不是"要不要上AI"的问题&#xff0c;而是"怎么把AI真正嵌进控制回路里"的问题。过去几年我见过太多项目&#xff0c;花大价钱买…

作者头像 李华
网站建设 2026/10/1 14:48:11

YOLOv11实战:五种鲷鱼检测模型训练与调优全解析

1. 鱼类检测项目整体设计与思路拆解1.1 这个项目到底在做什么先把这个项目的核心讲清楚。标题里提到的“感星鲷、参鲷、乔皮鲷、石鲷、嫩鲷”是五种具体的鱼类名称&#xff0c;项目要做的事情就是拿 YOLOv11 这个目标检测框架&#xff0c;训练一个能自动识别这五类鱼的模型。说…

作者头像 李华