开发者

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

开发者 https://www.devze.com 2023-02-03 11:02 出处:网络 作者: raoxiaoya
本文介绍一款工具 go-callvis,它能够将 Go 代码的调用关系可视化出来,并提供了可交互式的 web 服务。

本文介绍一款工具 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 "http://www.devze.compkg")

  -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 awww.devze.comccept new connection: %s", err)
		}
		// Part 3: create a goroutine that reajavascriptds 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 T开发者_Python开发CP 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)
			php		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

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

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

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

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

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

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号