「工具推薦」golang 代碼可視化工具 go-callvis

「工具推薦」go-callvis

go-callvis是相對 以圖片的形式展示了go程序的調(diào)用關(guān)系,這個工具在看復(fù)雜項目時尤其有用。

親測,借助它看祖?zhèn)鱣olang代碼,頭痛好多了。

安裝

go get -u github.com/TrueFurby/go-callvis
# or
git clone https://github.com/TrueFurby/go-callvis.git
cd go-callvis && make install

運(yùn)行依賴

項目地址:https://github.com/TrueFurby/go-callvis

使用命令

命令特別簡單,只需要簡單的輸入:

go-callvis [OPTIONS] <main package>

這里 main package 是包含代碼的main函數(shù)所在的包,比如項目 https://github.com/gusibi/oneplus/tree/master/idgenerator

目錄結(jié)構(gòu)為:

.
├── README.md
└── src
    ├── dbs
    ├── go.mod
    ├── go.sum
    ├── idg
    │   ├── area_code.go
    │   ├── idg.go
    │   ├── idg_test.go
    │   ├── index.go
    │   ├── index_test.go
    │   ├── sort.go
    │   ├── sort_test.go
    │   ├── wr.go
    │   └── wr_test.go
    ├── main.go
    └── sorteDB

其中src目錄是一個go package,運(yùn)行g(shù)o-callvis 時就需要先cd src/,然后再執(zhí)行命令:

go-callvis  -group pkg,type md52id

md52id 是package name,已在go.mod中聲明,pakage name是一個必須要帶的參數(shù)。

運(yùn)行命令,默認(rèn)會打開瀏覽器加載地址http://localhost:7878

圖片格式為 svg,也可以添加 -format=png,指定以png形式展示

推薦使用svg,svg格式的內(nèi)容是可交互的,比如這里想查看gin包的內(nèi)容就可以點(diǎn)擊 對應(yīng)的模塊來看詳情。

image

結(jié)果如果所示,圖像展示的結(jié)果就是這個包所有的調(diào)用關(guān)系,按包的調(diào)用層級由左向右排列。第二列上邊是 gin 框架的代碼,如果看代碼時不想看這部分,可以使用 ignore 參數(shù)排除掉。

命令為:

go-callvis -group pkg,type -ignore github.com/gin-gonic/gin md52id

這里 gin 包的名字是 github.com/gin-gonic/gin而不是 gin

如果要再排出idg 包,可以直接加在gin 包后邊,用,(英文逗號)隔開。

使用limit 命令可以得到相同的結(jié)果

go-callvis -group pkg,type -limit md52id md52id

得到的結(jié)果為:

image

如果想看idg包內(nèi)部的調(diào)用關(guān)系,可以使用 focus 命令,指定idg 包,命令如下:

go-callvis -focus=md52id/idg -group pkg,type -limit md52id md52id

結(jié)果如圖:
image

詳細(xì)命令可以參考:https://github.com/TrueFurby/go-callvis/tree/master/examples

使用go-callvis ,直觀的展示代碼的調(diào)用關(guān)系,對于大項目的源碼尤其有用,比如下圖是gin stagic 包的調(diào)用關(guān)系:

image

通過圖可以直觀的看到,

  1. static 調(diào)用了 staticFS,而staticFS 只使用了 HEAD和GET 方法。
  2. 所有的http method 最終都是通過調(diào)用handler來處理響應(yīng)的。

### go-callvis 的另類用法

go-callvis 也可以用來評估系統(tǒng)設(shè)計是否合理,代碼是否清晰,下圖是docker 的調(diào)用圖:

image

原圖地址:http://media.gusibi.mobi/8vZ7dwD6bLOVUBecbWsC5ZMTDOSUeeLzRw2kfxL44TVO8BM0AFGHGzVO1iHJCFqd

可以看到,代碼結(jié)構(gòu)非常清晰,調(diào)用鏈也比較簡單,項目成功果然每一環(huán)都做的非常完美。

內(nèi)推

以下是shopee內(nèi)推廣告,「深圳、新加坡、上?!沟穆毼欢加校信d趣的可以留言或者識別二維碼直接投遞。

image

最后,感謝女朋友支持和包容,比??

也可以在公號輸入以下關(guān)鍵字獲取歷史文章:公號&小程序 | 設(shè)計模式 | 并發(fā)&協(xié)程

掃碼關(guān)注

References

[1] go-callvis: https://github.com/TrueFurby/go-callvis
[2] Go: https://golang.org/dl/
[3] Graphviz:http://www.graphviz.org/download/: http://www.graphviz.org/download/
[4] 項目地址:https://github.com/TrueFurby/go-callvis: https://github.com/TrueFurby/go-callvis

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容