問題描述
在大型專案中,通常存在多個模塊,模塊對外暴露的功能通常是通過介面封裝,這樣可以明確模塊的功能,有效降低模塊與模塊之間的耦合度,同時模塊與模塊之間進行合理的組裝,介面的實作,有時可能存在多個實作,如介面每個實作對應一種策略、或者測驗代碼中因為測驗場景添加了測驗實作等,這時候如果想給介面添加一個方法,自然需要給所有的實作都添加這個方法,但是當你給介面添加了一個方法后,這時候之前介面的實作就無法通過idea找到了,或許,先給所有的實作添加方法,最后在給介面添加,
靈感
文章:http://oopsguy.com/2017/10/27/the-ultimate-guide-to-writing-a-go-tool/
專案:https://github.com/fatih/gomodifytags
這個主要是功能是,獲取一個go檔案中sruct的定義,然后給其每個欄位添加tag,核心使用了go中的ast去決議go檔案,生成相應代碼,
解決方案
實作的預期效果,給指定介面的方法,然后給齊所有的實作也添加上這個方法的默認實作,
思路
- 掃描專案中所有的struct和interface
- 判斷所有的struct與interface組合是否存在實作關系
- 通過ast給interface與struct添加方法
效果

原始碼
https://github.com/SimFG/interfacer
PS:目前的實作是最初版,只是可以滿足基本的情況,對于代碼中的一些特殊結構欠缺考慮,如果使用程序中發現問題,歡迎github上反饋
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/528698.html
標籤:Go
上一篇:狂神說Go語言筆記—初識Go語言
下一篇:搞開發的為什么這么累?
