go mod graph是一个用于查看和分析Go模块依赖关系的工具。在使用Go语言开发时,我们通常会使用Go模块来管理我们的项目依赖。go mod graph可以帮助我们更好地了解项目的依赖关系,并找出其中可能存在的问题。

安装go mod graph

要使用go mod graph,需要先安装Go编程语言和go mod graph工具本身。如果已经安装了Go编程语言,则可以使用以下命令安装go mod graph:

go get golang.org/x/mod/graph

使用go mod graph

使用go mod graph非常简单,只需在终端窗口中运行以下命令即可:

go mod graph

运行此命令将生成一个类似于下面这样的输出:

github.com/example/project1 v1.0.0
github.com/example/project2 v1.2.3
github.com/example/project1 v1.0.0 github.com/example/project2 v1.2.3

这个输出是一个表示项目依赖关系的有向无环图(DAG)。每行都包含一个模块的名称和版本号,后跟该模块所依赖的其他模块的名称和版本号。

Go mod graph的用途

go mod graph有几个主要用途:

  1. 查看依赖关系:通过运行go mod graph命令,可以查看项目中所有模块之间的依赖关系。这可以帮助开发者更好地了解项目的架构和设计,以及模块之间的相互作用。

  2. 诊断问题:go mod graph还可以帮助开发者找出可能存在的依赖问题。例如,如果发现两个模块依赖于同一个模块的不同版本,那么可能需要解决版本冲突问题。

  3. 优化依赖关系:通过分析go mod graph输出,可以确定哪些模块可能不需要或不再使用,从而优化项目的依赖关系。

使用Go toolchain

在使用go mod graph分析较大项目时,开发者可能需要面临非常复杂的go mod graph结果,文本形式的输出结果可能在过滤不相关的模块后仍然无法清晰得出依赖关系,此时可以考虑借助图像化工具显示输出结果,便于后续分析。

可以考虑使用graphviz类似的工具实现此目标,本文以graphviz为例,具体安装可以参考Download | Graphviz

将go mod graph的文本输出结果转化为图像输出需要借助Go toolchain进行文本的预处理,Go toolchain安装:

git clone https://github.com/lucasepe/modgv.git
cd modgv
go install

modgv从标准输入读取go mod graph生成的输出,并且生成DOT语言并写入标准输出:

go mod graph | modgv | dot -Tpng -o graph.png

得到结果类似于:

也可以生成可以具有点击模块文档的链接的pdf文档(对于文件大小要求较高)

go mod graph | modgv | dot -Tps2 -o graph.ps
ps2pdf graph.ps graph.pdf

使用Go toolchain梳理项目module依赖关系相关推荐

  1. jdeps_JDeps入门–分析项目的依赖关系

    jdeps JDeps是Java依赖关系分析工具 ,这是一个命令行工具,它处理Java字节码(意味着.class文件或包含它们的JAR),并分析类之间静态声明的依赖关系. 可以用各种方式过滤结果,并可 ...

  2. JDeps入门–分析项目的依赖关系

    JDeps是Java依赖关系分析工具 ,这是一个命令行工具,它处理Java字节码(意味着.class文件或包含它们的JAR),并分析类之间静态声明的依赖关系. 可以用各种方式过滤结果,并可以将其汇总到 ...

  3. Repo Jacking:依赖关系仓库劫持漏洞,影响谷歌GitHub等7万多个开源项目的供应链...

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 三个场景可导致 GitHub 仓库遭劫持.直接组合使用这三个场景可导致恶意代码注入.千万别这么做. 背景 最近的一个客户项目使我们开始 ...

  4. 排除jar_Gradle排除依赖关系

    Gradle排除依赖关系 在IDE中发现了C3P0的依赖,但是在build.gradle并没有手动导入,所以说某个jar包依赖了,在STS中没有像Maven可以直接查看依赖的窗口 可以在命令行下查看整 ...

  5. Maven之(九)依赖关系

    在maven的管理体系中,各个项目组成了一个复杂的关系网,但是每个项目都是平等的,是个没有贵贱高低,众生平等的世界,全球每个项目从理论上来说都可以相互依赖.就是说,你跟开发Spring的大牛们平起平坐 ...

  6. 【Web技术】1176- 前端模块依赖关系分析与应用

    Meta 摘要 这篇分享主要的内容是是如何使用webpack的stats对象进行依赖和编译速度的解析,该对象包含大量的编译时信息,我们可以用它生成包含有关于模块的统计数据的 JSON 文件.这些统计数 ...

  7. Maven简明教程(4)---依赖关系(理论篇)

    [工欲善其事,必先利其器] 在本文中,我们来简单介绍maven中几个常见的概念,这些概念在日常开发中经常见到.各位看官可以下面的介绍作为参考知识. -------------------------- ...

  8. structure101_使用structure101分析软件包的依赖关系

    structure101 稳定应用程序的一个关键是结构良好的代码库. 我们知道我们应该建立尽可能多的黑匣子,因为一旦完成一个黑匣子,我们就不必再考虑其内部了. 您只需要使用您或其他团队成员通过明确定义 ...

  9. 使用structure101分析软件包的依赖关系

    稳定应用程序的一个关键是结构良好的代码库. 我们知道我们应该建立尽可能多的黑匣子,因为一旦完成一个黑匣子,我们就不必再考虑它的内部了. 您只需要使用您或其他团队成员通过明确定义的界面编写的代码即可. ...

  10. npm 如何更新项目最新依赖包

    NPM 是什么? Node 软件包管理器(NPM)提供了各种功能来帮助你安装和维护项目的依赖关系. 由于错误修复.新功能和其他更新,依赖关系可能会随着时间的推移而变得过时.你的项目依赖越多,就越难跟上 ...

最新文章

  1. android 字幕,Android中的字幕文本
  2. mysql 存储过程支持传入数组参数_问个小问题,关于存储过程传递数组参数
  3. 网页布局设计的标准尺寸
  4. 移动端布局三种视口_移动端适配之视口和meta标签
  5. java解析sql查询字段_sql解析json格式字段 如何获取json中某个字段的值?
  6. Ubuntu中安装FastDFS
  7. 去掉xsl运行的飞鸽传书办法
  8. Elipse-基本使用
  9. 猿创征文|从单机百万tpmc到分布式千万tpmc,GaussDB性能提升的3个关键技术剖析
  10. 2019年江苏卷数学高考真题Word版含答案解析
  11. 网站应用和服务器管理(课程总结4)Week12 澳大利亚维多利亚大学VIT1204 Web Application and Server Management
  12. 服务器状态错误是怎么回事,内部服务器错误500是什么?该如何解决?
  13. 奥西450的服务器系统,奥西TDS450驱动
  14. Bypass-分流抢票
  15. 容器 I/O 性能诊断:到底哪个应用是带宽杀手?
  16. 怎么恢复电脑删除的文件,误删除数据恢复
  17. python中的占位符
  18. 计算机组成原理实验二
  19. 2016年8月27日 星期六 --出埃及记 Exodus 16:28
  20. 慢慢欣赏linux cgroup

热门文章

  1. 【Pandas】四个例子掌握用Python进行数据分析!一看就懂!
  2. Jeasyframe 开源框架 稳定版 V1.5 发布
  3. 关于FSMC的一些理解1
  4. layui使用之左侧导航动态生成与权限控制
  5. go语言的魔幻旅程14-反射
  6. 婚姻稳定性问题的理论分析及其引申
  7. 哪些是信息安全事故“高危企业?
  8. 酒醉后认错人乱了心,男人动了情,趁虚而入的温柔难自抑
  9. 成都市金牛区专利授权资助申报条件奖补
  10. nuaa-数据融合-基于强化学习的小游戏