go:快速添加介面方法及其實現

問題描述

在大型項目中,通常存在多個模組,模組對外暴露的功能通常是通過介面封裝,這樣可以明確模組的功能,有效降低模組與模組之間的耦合度,同時模組與模組之間進行合理的組裝。介面的實現,有時可能存在多個實現,如介面每個實現對應一種策略、或者測試程式碼中因為測試場景添加了測試實現等,這時候如果想給介面添加一個方法,自然需要給所有的實現都添加這個方法。但是當你給介面添加了一個方法後,這時候之前介面的實現就無法通過idea找到了。或許,先給所有的實現添加方法,最後在給介面添加。

靈感

文章://oopsguy.com/2017/10/27/the-ultimate-guide-to-writing-a-go-tool/
項目://github.com/fatih/gomodifytags

這個主要是功能是,獲取一個go文件中sruct的定義,然後給其每個欄位添加tag,核心使用了go中的ast去解析go文件,生成相應程式碼。

解決方案

實現的預期效果,給指定介面的方法,然後給齊所有的實現也添加上這個方法的默認實現。

思路

  • 掃描項目中所有的struct和interface
  • 判斷所有的struct與interface組合是否存在實現關係
  • 通過ast給interface與struct添加方法

效果
效果图
源碼
//github.com/SimFG/interfacer

PS:目前的實現是最初版,只是可以滿足基本的情況,對於程式碼中的一些特殊結構欠缺考慮,如果使用過程中發現問題,歡迎github上回饋

Tags: