日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

GoLang調(diào)用鏈可視化go-callvis使用介紹_Golang

作者:raoxiaoya ? 更新時(shí)間: 2023-04-02 編程語(yǔ)言

本文介紹一款工具 go-callvis,它能夠?qū)?Go 代碼的調(diào)用關(guān)系可視化出來(lái),并提供了可交互式的 web 服務(wù)。

go get -u github.com/ofabry/go-callvis
在windows系統(tǒng)上并沒(méi)有自動(dòng)安裝,需要進(jìn)入下載的目錄go install
在linux系統(tǒng)上自動(dòng)安裝了

> 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.

依賴(lài)

  • Go 1.17+
  • Graphviz (可選,當(dāng)工具指定了 -graphviz 時(shí)需要)

測(cè)試代碼

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上可以正常運(yùn)行,windows上會(huì)報(bào)錯(cuò)

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

go-callvis 默認(rèn)將代碼調(diào)用關(guān)系存儲(chǔ)成 svg 格式的圖形。

在瀏覽器中訪(fǎng)問(wèn) http://localhost:7878

點(diǎn)擊上面的 log 模塊,將會(huì)進(jìn)入 log 模塊的代碼調(diào)用交互圖中

它主要是作用是清晰的列出了包與包之間的依賴(lài)以及調(diào)用關(guān)系,用來(lái)理解項(xiàng)目的大致架構(gòu)。

原文鏈接:https://blog.csdn.net/raoxiaoya/article/details/126974420

欄目分類(lèi)
最近更新