「工具推荐」go-callvis

go-callvis是相对 以图片的形式展示了go程序的调用关系,这个工具在看复杂项目时尤其有用。

亲测,借助它看祖传golang代码,头痛好多了。

安装

go get -u github.com/TrueFurby/go-callvis
# or
git clone https://github.com/TrueFurby/go-callvis.git
cd go-callvis && make install
复制代码

运行依赖

项目地址:https://github.com/TrueFurby/go-callvis

使用命令

命令特别简单,只需要简单的输入:

go-callvis [OPTIONS] <main package>
复制代码

这里 main package 是包含代码的main函数所在的包,比如项目 github.com/gusibi/onep…

目录结构为:

.
├── README.md
└── src
├── dbs
├── go.mod
├── go.sum
├── idg
│   ├── area_code.go
│   ├── idg.go
│   ├── idg_test.go
│   ├── index.go
│   ├── index_test.go
│   ├── sort.go
│   ├── sort_test.go
│   ├── wr.go
│   └── wr_test.go
├── main.go
└── sorteDB
复制代码

其中src目录是一个go package,运行go-callvis 时就需要先cd src/,然后再执行命令:

go-callvis  -group pkg,type md52id
复制代码

md52id 是package name,已在go.mod中声明,pakage name是一个必须要带的参数。

运行命令,默认会打开浏览器加载地址http://localhost:7878

图片格式为 svg,也可以添加 -format=png,指定以png形式展示

推荐使用svg,svg格式的内容是可交互的,比如这里想查看gin包的内容就可以点击 对应的模块来看详情。

结果如果所示,图像展示的结果就是这个包所有的调用关系,按包的调用层级由左向右排列。第二列上边是 gin 框架的代码,如果看代码时不想看这部分,可以使用 ignore 参数排除掉。

命令为:

go-callvis -group pkg,type -ignore github.com/gin-gonic/gin md52id
复制代码

这里 gin 包的名字是 github.com/gin-gonic/gin而不是 gin

如果要再排出idg 包,可以直接加在gin 包后边,用,(英文逗号)隔开。

使用limit 命令可以得到相同的结果

go-callvis -group pkg,type -limit md52id md52id

得到的结果为:

如果想看idg包内部的调用关系,可以使用 focus 命令,指定idg 包,命令如下:

go-callvis -focus=md52id/idg -group pkg,type -limit md52id md52id
复制代码

结果如图:

详细命令可以参考:github.com/TrueFurby/g…

使用go-callvis ,直观的展示代码的调用关系,对于大项目的源码尤其有用,比如下图是gin stagic 包的调用关系:

通过图可以直观的看到,

  1. static 调用了 staticFS,而staticFS 只使用了 HEAD和GET 方法。
  2. 所有的http method 最终都是通过调用handler来处理响应的。

### go-callvis 的另类用法

go-callvis 也可以用来评估系统设计是否合理,代码是否清晰,下图是docker 的调用图:

作者:goodspeed
链接:https://juejin.cn/post/6844904051327369229
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最新文章

  1. [.NET领域驱动设计实战系列]专题二:结合领域驱动设计的面向服务架构来搭建网上书店
  2. 【Java并发编程实战】-----&ldquo;J.U.C&rdquo;:CAS操作
  3. C中嵌入python
  4. 一篇文看懂Hadoop:风雨十年,未来何去何从
  5. objective c,copy, mutableCopy区别
  6. Android——GridLayout
  7. 管理IPv6网络连接
  8. python 映射列表 学习
  9. ZOJ 1610 Count the Colors (线段树 成段更新)
  10. webkit.net使用方法日记
  11. JavaService wrapper
  12. 跨域的iframe自动调整高度(cross-domain iframe resizer)
  13. MySQLdb callproc 方法
  14. Display Database Image using MS SQL Server 2008 Reporting Services
  15. 借助 frp 随时随地访问自己的树莓派
  16. cs231n spring 2017 lecture9 CNN Architectures 听课笔记
  17. mac下利用Breakpad的dump文件进行调试
  18. ●BZOJ 1492 [NOI2007]货币兑换Cash
  19. MySql分割字符串【存储过程】
  20. Oracle数据库表的一些宏处理

热门文章

  1. Windows如何创存储虚拟机并制作存储虚拟化LUN的映射
  2. 【设计模式】Java设计模式 -工厂模式
  3. 食之无味?App Startup 可能比你想象中要简单
  4. Android平台RTMP/RTSP播放器开发系列--解码和绘制
  5. 【读书笔记】C#高级编程 第二十五章 事务处理
  6. [CG] 顶点动画贴图 (Vertex Animation Texture, VAT)
  7. AD画板从头开始
  8. Python数据科学手册-机器学习:朴素贝叶斯分类
  9. Python数据科学手册-Numpy数组的计算,通用函数
  10. Rust变量用法与特征