go package循環(huán)引用的產(chǎn)生和如何解決

????我們?cè)谌粘o項(xiàng)目開(kāi)發(fā)的時(shí)候,隨著項(xiàng)目的需求越來(lái)越多,內(nèi)容量也是越來(lái)越多,會(huì)導(dǎo)致包與包之間難免有很多依賴(lài)關(guān)系。
????簡(jiǎn)單用圖來(lái)表示就是:


下面 我們來(lái)看一個(gè)相互依賴(lài)的包代碼實(shí)例:

????????????????????????run.go
????????????????A.go
????????C.go
B.go

遇到這種情況我們?nèi)绾蝸?lái)處理這種互相依賴(lài)的問(wèn)題呢。這邊總結(jié)了三種解決辦法:
1 將引用的包內(nèi)信息,通過(guò)引入interface 改變循環(huán)依賴(lài)的問(wèn)題:
2 將一些基礎(chǔ)需要使用的結(jié)構(gòu)體,單獨(dú)放到不需要引用其他除基礎(chǔ)包之外的包里
3 最不建議的 通過(guò)go:linkname的注釋來(lái)避免導(dǎo)入包
其中第二種是比較推薦,也是實(shí)際工作中最方便的,因?yàn)閷?shí)際生產(chǎn)中的依賴(lài)特別復(fù)雜,有時(shí)候第一種實(shí)現(xiàn)起來(lái)很麻煩,第三種也是最不推薦的。具體如何操作我在我自己的視頻里做了具體如何實(shí)現(xiàn)。
標(biāo)簽: