「工具推荐」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
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

「工具推荐」golang 代码可视化工具 go-callvis的更多相关文章

  1. 「starter推荐」简单高效Excel 导出工具

    EasyExcel EasyExcel是一个基于Java的简单.省内存的读写Excel的开源项目.在尽可能节约内存的情况下支持读写百M的Excel. 64M内存1分钟内读取75M(46W行25列)的E ...

  2. Golang 代码检查工具

    需要先安装 gometalinter工具 #!/bin/bash #should install #go get github.com/alecthomas/gometalinter #gometal ...

  3. NuGet命令行工具和可视化工具

    Nuget出了命令行工具之外,还有一个可视化工具,下载地址如下: 命令行(推荐官网下载,有中文提示!):https://dist.nuget.org/index.html 可视化(简单.方便.易用): ...

  4. [MongoDB]可视化工具Robomongo

    摘要 习惯了可视化的管理数据的方式,通过敲命令,确实有些不自在.这里推荐一个mongodb的可视化工具——Robomongo 相关文章 [MongoDB]入门操作 [MongoDB]增删改查 [Mon ...

  5. Android代码安全工具集

    前言 原计划出一系列APP测试文章,从基础发,整个思路还在整理,秉着吹牛的态度,整理了一部分安卓代码安全的工具推荐给大家玩玩,提升一下逼格. 在这之前给大家讲讲阿旺对安全测试的理解,不管别人怎么扯,一 ...

  6. eclipse Java代码折叠工具

      eclipse Java代码折叠工具 CreateTime--2018年5月17日15点09分 Author:Marydon 1.问题描述 eclipse自带的代码折叠工具,无法折叠try{}ca ...

  7. MySQL学习(一)MySQLWorkbench(MySQL可视化工具)下载,安装,测试连接,以及注意事项

    PS:MySQLWorkbench是MYSQL自带的可视化工具,无论使用哪个可视化工具,其实大同小异,如果想以后走的更远的话,可以考虑使用命令行操作数据库MYSQL.可视化工具让我们初学者更能理解数据 ...

  8. python代码检查工具pylint 让你的python更规范

    1.pylint是什么? Pylint 是一个 Python 代码分析工具,它分析 Python 代码中的错误,查找不符合代码风格标准(Pylint 默认使用的代码风格是 PEP 8,具体信息,请参阅 ...

  9. 【MySQL数据库】MySQL5.7安装与配置、可视化工具安装和破解

    软件下载 Mysql5.7地址:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.19-winx64.zip 安装步骤 下载后会得到zip ...

  10. 工具推荐-使用RedisInsight工具对Redis集群CURD操作及数据可视化和性能监控

    关注「WeiyiGeek」公众号 设为「特别关注」每天带你玩转网络安全运维.应用开发.物联网IOT学习! 希望各位看友[关注.点赞.评论.收藏.投币],助力每一个梦想. 本章目录 目录 0x00 快速 ...

随机推荐

  1. zabbix_agentd断断续续端无法访问问题记录

    问题现象: zabbix监控上出现zabbix_agentd无法访问,但是实际上zabbix_agentd是存活状态 每隔一段时间就会出现这样的情况 问题原因 zabbix_agentd端任务较多,活 ...

  2. KingbaseESV8R6 垃圾回收原理以及如何预防膨胀

    背景 KingbaseESV8R6支持snapshot too old 那么实际工作中,经常看到表又膨胀了,那么我们讨论一下导致对象膨胀的常见原因有哪些呢? 未开启autovacuum 对于未开启au ...

  3. Elasticsearch 快照生命周期管理 (SLM) 实战指南

    文章转载自:https://mp.weixin.qq.com/s/PSfgPJc4dKN2pOZd0Y02wA 1.Elasticsearch 保证高可用性的方式 Elasticsearch 保证集群 ...

  4. 安装 loki 轻量级日志监控系统

    文章转载自:https://www.cnblogs.com/flypig666/archive/2004/01/13/14151801.html 从本文中学习到的是docker-compose相关命令 ...

  5. Alertmanager篇

    报一直是整个监控系统中的重要组成部分,Prometheus监控系统中,采集与警报是分离的.警报规则在 Prometheus 定义,警报规则触发以后,才会将信息转发到给独立的组件 Alertmanage ...

  6. flutter系列之:深入理解布局的基础constraints

    目录 简介 Tight和loose constraints 理解constraints的原则 总结 简介 我们在flutter中使用layout的时候需要经常对组件进行一些大小的限制,这种限制就叫做c ...

  7. Redis核心设计原理(深入底层C源码)

    Redis 基本特性 1. 非关系型的键值对数据库,可以根据键以O(1) 的时间复杂度取出或插入关联值 2. Redis 的数据是存在内存中的 3. 键值对中键的类型可以是字符串,整型,浮点型等,且键 ...

  8. sql内连查询

    select <查询的列名> from <表名> inner join `<连接的表名称>` on <第一张表的主键> = <第二张表的外键> ...

  9. 不安装运行时运行 .NET 程序 - NativeAOT

    大家好,先祝大家国庆快乐.不过大家看到这篇文章的时候估计已经过完国庆了 . 上一篇我们写了如何通过 SelfContained 模式发布程序(不安装运行时运行.NET程序)达到不需要在目标机器上安装 ...

  10. HDU4734 F(x) (数位DP)

    (如此简短的题目给人一种莫名的压迫感......) 题目中定义一个数的权值求解函数:F(x) = An * 2n-1 + An-1 * 2n-2 + ... + A2 * 2 + A1 * 1. 观察 ...