ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

go list command

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模块module2.基本语法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/gin2.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/hash2.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/null21;thenecho包存在elseecho包不存在fi2查看模块的可用版本列表。go list-m-versionsmod-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.03列出项目的所有直接依赖。go list-f{{join .Imports \n}}./...|sort-u4列出某个包的所有依赖。go list-f{{join .Deps \n}}hash5导出依赖树为 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.19查看某模块的详细信息go list-m-jsongithub.com/gin-gonic/gin输出模块的Path、Version、Time、Dir、GoMod等字段。10找出依赖了某个包的所有包go list-f{{.ImportPath}} {{join .Deps }}./...|grepgolang.org/x/sync11宽容模式处理错误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}}hash6. 小结go list的核心价值是把 Go 的包和模块信息变成可编程的数据包模式go list pkg查询包信息配合-json或-f输出结构化数据模块模式go list -m切换视角管理依赖、检查更新脚本友好配合grep、jq、sort做自动化分析不编译代码只解析元数据速度快适合 CI 和脚本掌握go list你就能用命令行快速回答“这个包在哪”“依赖了什么”“有没有更新”等问题无需打开 IDE 或手动翻go.mod。参考文献Go 官方文档go listGo Modules Referencepkg.go.dev 包查询
返回列表