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 "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 build 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

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

它主要是作用是清晰的列出了包与包之间的依赖以及调用关系,用来理解项目的大致架构。
到此这篇关于golang调用链可视化go-callvis使用介绍的文章就介绍到这了,更多相关Go callvis内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
加载中,请稍侯......
精彩评论