GoLang调用链可视化go-callvis使用介绍

本文介绍一款工具 go-callvis,它能够将 Go 代码的调用关系可视化出来,并提供了可交互式的 web 服务。

go get -u github.com/ofabry/go-callvis
在windows系统上并没有自动安装,需要进入下载的目录go install
在linux系统上自动安装了

> go-callvis

go-callvis: visualize call graph of a Go program.

Usage:

go-callvis [flags] package

Package should be main package, otherwise -tests flag must be used.

Flags:

-debug
        Enable verbose log.
  -file string
        output filename - omit to use server mode
  -focus string
        Focus specific package using name or import path. (default "main")
  -format string
        output file format [svg | png | jpg | ...] (default "svg")
  -graphviz
        Use Graphviz's dot program to render images.
  -group string
        Grouping functions by packages and/or types [pkg, type] (separated by comma) (default "pkg")
  -http string
        HTTP service address. (default ":7878")
  -ignore string
        Ignore package paths containing given prefixes (separated by comma)
  -include string
        Include package paths with given prefixes (separated by comma)
  -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
        Omit calls to unexported functions.
  -nostd
        Omit calls to/from packages in standard library.
  -skipbrowser
        Skip opening browser.
  -tags build tags
        a list of build tags to consider satisfied during the build. For more information about build tags, see the description of buil
d constraints in the documentation for the go/build package
  -tests
        Include test code.
  -version
        Show version and exit.

依赖

  • Go 1.17+
  • Graphviz (可选,当工具指定了 -graphviz 时需要)

测试代码

package main
import (
	"log"
	"net"
)
func main() {
	// Part 1: create a listener
	l, err := net.Listen("tcp", ":8000")
	if err != nil {
		log.Fatalf("Error listener returned: %s", err)
	}
	defer l.Close()
	for {
		// Part 2: accept new connection
		c, err := l.Accept()
		if err != nil {
			log.Fatalf("Error to accept new connection: %s", err)
		}
		// Part 3: create a goroutine that reads and write back data
		go func() {
			log.Printf("TCP session open")
			defer c.Close()
			for {
				d := make([]byte, 1024)
				// Read from TCP buffer
				_, err := c.Read(d)
				if err != nil {
					log.Printf("Error reading TCP session: %s", err)
					break
				}
				log.Printf("reading data from client: %s\n", string(d))
				// write back data to TCP client
				_, err = c.Write(d)
				if err != nil {
					log.Printf("Error writing TCP session: %s", err)
					break
				}
			}
		}()
	}
}

在linux上可以正常运行,windows上会报错

> go-callvis main67.go
2022/09/21 15:28:50 http serving at http://localhost:7878

go-callvis 默认将代码调用关系存储成 svg 格式的图形。

在浏览器中访问 http://localhost:7878

点击上面的 log 模块,将会进入 log 模块的代码调用交互图中

它主要是作用是清晰的列出了包与包之间的依赖以及调用关系,用来理解项目的大致架构。

到此这篇关于GoLang调用链可视化go-callvis使用介绍的文章就介绍到这了,更多相关Go callvis内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Go语言数据结构之二叉树可视化详解

    目录 题目 源代码 做题思路 扩展 左右并列展示 上下并列展示 总结回顾 题目 以图形展示任意二叉树,如下图,一个中缀表达式表示的二叉树:3.14*r²*h/3 源代码 package main import ( "fmt" "io" "os" "os/exec" "strconv" "strings" ) type any = interface{} type btNode struc

  • GoLang调用链可视化go-callvis使用介绍

    本文介绍一款工具 go-callvis,它能够将 Go 代码的调用关系可视化出来,并提供了可交互式的 web 服务. go get -u github.com/ofabry/go-callvis在windows系统上并没有自动安装,需要进入下载的目录go install在linux系统上自动安装了 > go-callvis go-callvis: visualize call graph of a Go program. Usage: go-callvis [flags] package Pac

  • OpenTelemetry初识及调用链Trace详解

    目录 前言 初识OpenTelemetry 调用链Trace Span Span Context Attributes Span事件 Span Links Span状态 Span Kind Trace构建的原理 Metrics Logs Baggage 总结 前言 OpenTelemetry作为一个分布式追踪的项目,他支持非常多的语言,如Java,Golang,Python等,鉴于笔者的主力语言为Java,并且后续需要介绍OpenTelemetry的Java Agent实现,所以后续文章中的相关

  • golang调用c实现的dll接口细节分享

    目的 本篇文章主要介绍golang在调用c实现的dll时,具体的一些方式.比如值传递.参数传递.指针等等的一些使用. 一.dll的代码 c实现的dll代码: hello.h #ifndef _HELLO_H_ #define _HELLO_H_ #include <stdio.h> #define HELLO_EXPORTS #ifdef HELLO_EXPORTS #define EXPORTS_API extern "C" __declspec(dllexport) #

  • Java 实现分布式服务的调用链跟踪

    目录 为什么要实现调用链跟踪? 如何实现? 第一步,看图.看场景,用户浏览器的一次请求行为所走的路径是什么样的 第二步,实现.不想看代码可直接拉最后看结果和原理 测试一下结果: 为什么要实现调用链跟踪? 随着业务的发展,所有的系统最终都会走向服务化体系,微服务的目的一是提高系统的稳定性,二是提高持续交付的效率,为什么能提高这两项不是今天讨论的内容. 当然这也不是绝对的,如果业务还在MVP验证,团队规模小个人觉得完全没必要微服务化.单体应用是比较好的选择.作者是有经历过从单体应用到1000+应用的

  • golang 调用c语言动态库方式实现

    下面我们自己在 Linux 下做一个动态库(.so 文件 - Shared Object),然在用 Go 来使用它.本文所用的操作系统为 Ubuntu18.04, 以 gcc 作为编译器. 1.实现头文件,声明文件中函数.这里创建一个add.h文件. #ifndef __ADD_H__ #define __ADD_H__ char* Add(char* src, int n); #endif 2.实现add主体函数add.c #include <string.h> #include <s

  • golang RPC包原理和使用详细介绍

    目录 工作流程 工作模式 http模式 服务器模式 本篇文章旨在通过学习rpc包和github上的一个rpc小项目,熟悉和学习golang中各个包的使用 工作流程 通过阅读官方文档,了解了rpc的基本工作模式 第一步,建立一个用于远程调用的包,存放仅供远程调用使用的方法和类型- 第二步,实例化包的对象,并在rpc中注册该包,以便之后的调用 第三步,建立一个服务端,接收客户端的请求,使用编码器解析请求后,根据请求中的方法和参数,调用第二步注册的实例的方法,然后使用编码器把返回值加密后,返回给客户端

  • Golang调用FFmpeg转换视频流的实现

    目录 问题背景 方法实现 1. 使用FFmpeg-go封装好的方法 2. 直接调用FFmpeg 总结 问题背景 问题背景是在,由于视频采集端使用的是H264编码采集的裸流,而网络流媒体大多是以FLV为主的直播方式进行的,为了实现实时直播,当前是打算直接使用FFmpeg将H264裸流实时转成FLV视频流. 为什么是使用FLV视频流呢,因为相对简单,加上FLV Header后将每个NALU打包成Tag并进去大致就行了.但是这块怕有疏忽,最终还是想使用成熟的工具FFmpeg. 方法实现 1. 使用FF

  • 分布式系统下调用链追踪技术面试题

    引言 一个复杂的分布式系统,用户发起一个请求,这个请求可能调用几十到几百个服务,经过很多业务层,而每个业务又是多个机器集群,一个请求具体被随机到哪台机器上又无法确定,如果最后用户的请求失败,只返回一个错误提示,作为开发人员,该如何定位解决问题?你需要定位以下问题: 问题出在哪个服务,是你负责的服务还是调用别人服务的某一个环节. 同一个服务集群有多台机器,到底要去哪个机房哪台机器定位某条报错信息. 同一个接口可能有多次请求,到底是哪一次报错了. 多个服务之间调用顺序是怎样的. 如果需要响应速度优化

  • golang协程与线程区别简要介绍

    目录 一.进程与线程 二.并发与并行 三.go协程与线程 1.调度方式 2.调度策略 3.上下文切换速度 4.栈的大小 四.GMP模型 一.进程与线程 进程是操作系统资源分配的基本单位,是程序运行的实例.例如打开一个浏览器就开启了一个进程. 线程是操作系统调度到CPU中执行的基本单位.例如在浏览器里新建一个窗口就需要一个线程来进行处理. 在一般情况下,线程是进程的组成部分,一个进程可以包含多个线程.例如浏览器可以新建多个窗口. 进程中的多个线程并发执行并共享进程的内存等资源.例如多个窗口之间可以

  • JavaScript可视化与Echarts详细介绍

    目录 一.可视化介绍 二.可视化库介绍 三.Echarts Echarts引入和使用 了解基础配置 一.可视化介绍 可视化:将数据用图表展示出来,让数据更加直观.让数据特点更加突出 应用场景:营销数据.生产数据.用户数据 二.可视化库介绍 常见的数据可视化库: D3.js:目前 Web 端评价最高的 Javascript 可视化工具库(入手难) ECharts.js:百度出品的一个开源 Javascript 数据可视化库 Highcharts.js:国外的前端数据可视化库,非商用免费,被许多国外

随机推荐