本篇文章給大家介紹有關(guān)Golang的相關(guān)知識(shí),聊聊開(kāi)源Go中的一個(gè)循環(huán)依賴檢測(cè)工具(go-cyclic) ,希望對(duì)大家有所幫助。
go-cyclic 循環(huán)依賴解決工具
問(wèn)題描述
作為一個(gè) Go 開(kāi)發(fā)者,經(jīng)常會(huì)在大型項(xiàng)目中遇到包的循環(huán)依賴問(wèn)題。
如果 Golang 出現(xiàn)循環(huán)依賴,那么會(huì)在編譯時(shí)拋出異常。
什么時(shí)候會(huì)出現(xiàn)循環(huán)依賴?
如果有兩個(gè)包:package a 和 package b。當(dāng)在包a依賴包b,包b依賴包a時(shí),就會(huì)產(chǎn)生循環(huán)依賴。真實(shí)情況可能會(huì)更復(fù)雜一些。例如,如包a依賴包b,包b依賴包c(diǎn),包c(diǎn)又依賴包a時(shí),形成一個(gè)環(huán)。
php入門(mén)到就業(yè)線上直播課:進(jìn)入學(xué)習(xí)
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用
import cycle not allowed
而且如果項(xiàng)目很大的時(shí)候,一個(gè)包下面有很多 .go 文件,只提示包與包的循環(huán)引用(如上圖),是很難定位到哪個(gè) .go 文件和哪個(gè) .go 文件直接進(jìn)行了循環(huán)引用,難以排查。
go-cyclic 簡(jiǎn)單用法
github地址:github.com/elza2/go-cyclic (歡迎各位大佬提 pr)
go-cyclic 可以用來(lái)檢查項(xiàng)目是否存在循環(huán)依賴,并且可以定位到具體的 .go 文件。幫助快速定位循環(huán)問(wèn)題。
快速開(kāi)始
go install github.com/elza2/go-cyclic@latest # path 路徑要設(shè)置為 go.mod 文件所在的路徑.go-cyclic gocyclic --dir .path
# success output.Success. Not circular dependence.# failed output.Failed. 1 circular dependence chains were found.┌---→ app.go┆ ↓ ┆ routes.go┆ ↓ └--- handler.go