Golang 可视化工具之go-callvis的实现

 更新时间:2026年06月25日 09:15:38   作者:普通网友  
Go-callvis 是一个开发工具,用于帮助使用交互式视图可视化Go 程序的调用图,此工具的目的是为开发人员提供一个可视化的 Go 程序概览,下面就来详细的介绍一下,感兴趣的可以了解一下

一 背景

日常我们会看一些开源项目,或者想看自己写的代码可视化,在golang中可以利用工具实现,go-callvis是以图片的形式展示了go程序的调用关系,在看复杂项目时尤其有用。

二 go-callvies 简介

2.1 工具简介

Go-callvis 是一个开发工具,用于帮助使用交互式视图可视化 Go 程序的调用图。

此工具的目的是为开发人员提供一个可视化的 Go 程序概览,使用来自调用图的数据及其与包和类型的关系。这在大型项目中特别有用,因为这些项目的代码复杂度要高得多,或者只是简单地试图理解其他人的代码。

2.2 特性

  • 支持go mod
  • 程序中的特定焦点包
  • 点击软件包,使用交互式查看器快速切换焦点
  • 按类型按包和/或方法分组函数
  • 过滤器包到特定的导入路径前缀
  • 忽略标准库中的函数
  • 省略各种类型的函数调用

三 安装

  • go get安装
$ go get -u github.com/ofabry/go-callvis 
  • 源码编译安装
$ git clone https://github.com/ofabry/go-callvis.git cd go-callvis && make install

四 输出示例

它运行指针分析来构造程序的调用图,并使用数据生成点格式的输出,可以使用 Graphviz 工具进行渲染。

五 安装

go get -u github.com/ofabry/go-callvis
# or
git clone https://github.com/ofabry/go-callvis.git
cd go-callvis && make install

六 使用

go-callvis [可选参数] <包路径>

1)使用浏览器交互展示

默认情况下,HTTP服务器在http://localhost:7878/上侦听,请使用选项`-http="ADDR:PORT"`更改HTTP服务器地址。

2)静态输出

要生成单个输出文件,使用选项-file=<file path>选择输出文件目标。

输出格式默认为svg,使用选项-format=<svg|png|jpg|…>选择其他输出格式。

3)其他参数

-debug
         输出详细日志
   -file string
         以文件新式输出结果,并将忽略server交互模式
   -focus string
         Focus specific package using name or import path. (default "main")
   -format string
         输出文件的格式 [svg | png | jpg | ...] (默认 "svg")
   -graphviz
         使用Graphviz渲染图像
   -group string
         分组功能,根据包 与/或 类型分组 [pkg, type] (用逗号分开) (默认 "pkg"),例如 -group pkg,type
   -http string
         HTTP 服务地址 (默认 ":7878")
   -ignore string
        忽略包含给定前缀的包路径(用逗号分开)
   -include string
         包含具有给定前缀的包路径 (用逗号分开)
   -limit string
         Limit package paths to given prefixes (separated by comma)
   -minlen uint
         Minimum edge length (for wider output). (default 2)
   -nodesep float
         Minimum space between two adjacent nodes in the same rank (for taller output). (default 0.35)
   -nointer
         忽略对未导出函数的调用。
   -nostd
         忽略标准库的调用
   -skipbrowser
         跳过打开浏览器
   -tags build tags
         a list of build tags to consider satisfied during the build. For more information about build tags, see the description of build constraints in the documentation for the go/build package
   -tests
         包含测试代码
   -version
         显示版本号
1)解析main包
go-callvis -skipbrowser -nostd ./
2)解析testPkg包
go-callvis -group pkg,type -focus testPkg github.com/项目具体路径 

简单示例

$ go-callvis -format png -group pkg,type -focus github.com/kaliarch/cobra
/cmd/app github.com/kaliarch/cobra
2021/08/18 11:22:12 http serving at http://localhost:7878
2021/08/18 11:22:21 converting dot to png..
2021/08/18 11:22:22 serving file: /var/folders/wn/367g1v9n1bv0sg1k8qldzym80000gn/T/go-callvis_export.png

到此这篇关于Golang 可视化工具之go-callvis的实现的文章就介绍到这了,更多相关Golang go-callvis内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go  iota 常量基本语法介绍

    Go  iota 常量基本语法介绍

    这篇文章主要介绍了Go 为什么要设计 iota 常量,我们介绍了 Go 中 iota 的基本语法。同时基于历史资料针对 iota 到底是什么,为什么要这么叫,又有什么用进行了一番研究,需要的朋友可以参考下
    2022-06-06
  • go语言实现银行卡号Luhn校验

    go语言实现银行卡号Luhn校验

    这篇文章主要为大家介绍了go语言Luhn校验测试银行卡号码的示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 详解Golang 推荐的命名规范

    详解Golang 推荐的命名规范

    这篇文章主要介绍了详解Golang 推荐的命名规范,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-02-02
  • 浅析go语言如何实现协程的抢占式调度的

    浅析go语言如何实现协程的抢占式调度的

    go语言通过GMP模型实现协程并发,为了避免单协程持续持有线程导致线程队列中的其他协程饥饿问题,设计者提出了一个抢占式调度机制,本文会基于一个简单的代码示例对抢占式调度过程进行深入讲解剖析
    2024-04-04
  • 使用go语言将单反斜杠改为双反斜杠的方法

    使用go语言将单反斜杠改为双反斜杠的方法

    最近开发的时候遇到这么个问题,就是在window上获取了文件目录的字段,然后将这个绝对路径保存到数据库,但是前端展示的时候路径的双反斜杠变成了单反斜杠,本文给大家介绍了使用go语言将单反斜杠改为双反斜杠的方法,需要的朋友可以参考下
    2024-01-01
  • Go获取与设置环境变量的方法详解

    Go获取与设置环境变量的方法详解

    go环境变量的配置其实说真的说难也难,说不难也不难,只要配置成功过一次以后后面都很简单,但是最好是要做好笔记,这篇文章主要给大家介绍了关于Go获取与设置环境变量的相关资料,需要的朋友可以参考下
    2021-11-11
  • Go 高性能本地缓存 FastCache 的使用

    Go 高性能本地缓存 FastCache 的使用

    FastCache是Go本地缓存库,主打高性能、低开销、零 GC,专门解决传统缓存,在大数据量、高并发场景下的性能瓶颈和 GC 压力问题,下面就来详细的介绍一下Go 高性能本地缓存 FastCache 的使用,感兴趣的可以了解一下
    2026-06-06
  • 在VS Code中配置Go开发环境的完整过程

    在VS Code中配置Go开发环境的完整过程

    如果您希望在本地计算机上开始使用Go语言进行开发,但尚未配置好VSCode中的Go支持,则可能是由于缺少必要工具链、扩展或环境变量设置,可以看看这篇文章,这篇文章主要介绍了在VS Code中配置Go开发环境的完整过程,需要的朋友可以参考下
    2026-04-04
  • Golang解析yaml文件的方法小结

    Golang解析yaml文件的方法小结

    Go 语言没有内置解析 yaml 文件的功能,实现 yaml 的解析可以使用第三方库,下面我们就来看看如何使用opkg.in/yaml.v2 和 gopkg.in/yaml.v3实现解析yaml吧
    2024-11-11
  • 基于Golang编写贪吃蛇游戏

    基于Golang编写贪吃蛇游戏

    这篇文章主要为大家学习介绍了Golang如何基于终端库termbox-go做个功能较简单的贪吃蛇游戏,文中的示例代码讲解详细,具有一定的学习价值
    2023-07-07

最新评论