網(wǎng)站首頁(yè) 編程語(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
相關(guān)推薦
- 2022-06-25 Docker?安裝?Consul單機(jī)模式的操作方法_docker
- 2022-06-12 淺談Android?Dialog窗口機(jī)制_Android
- 2023-10-28 go帶緩沖chan實(shí)現(xiàn)消息隊(duì)列功能_Golang
- 2022-05-20 Spring JdbcTemplate 快速上手
- 2022-12-12 C語(yǔ)言scanf語(yǔ)句吃掉回車(chē)或者空格問(wèn)題及解決_C 語(yǔ)言
- 2022-10-04 go常用指令之go?mod詳解_Golang
- 2023-04-07 C語(yǔ)言高級(jí)教程之變長(zhǎng)數(shù)組詳解_C 語(yǔ)言
- 2022-07-20 C語(yǔ)言深入刨析數(shù)據(jù)結(jié)構(gòu)之棧與鏈棧的設(shè)計(jì)與應(yīng)用_C 語(yǔ)言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過(guò)濾器
- Spring Security概述快速入門(mén)
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支