整理一波Go工程化目錄結構~

aaayi發表於2021-07-02

在Go語言領域遨遊了幾個月後,發現自己對Go語言相關的工程目錄結構有些不瞭解,按照原來的習慣在Go工程中建立的目錄結構顯得比較奇怪,好的目錄結構絕對是可以加強工程效率的,所以接下來會參考煎魚、毛大等大佬專案的結構做分析並且改造一個我的半成品專案。

每個專案的目錄結構並不是有規定模板的,也有很多優秀的專案並不是常規的專案佈局,還是要依據專案型別、大小及靈活程度做調整,但一定要保證結構清晰!

工程化目錄

/pkg

一般來說作為外部應用程式可以使用的庫程式碼,也即可以被其他專案引用的包。在pkg內部可以按照功能分類。所以說根目錄下的pkg資料夾是作為整個專案的共享包庫使用。

當然在非根目錄的下也可以很好的加入pkg目錄,很多專案會在internal目錄下加入pkg表示內部共享包庫。

/internal

大多數開源專案及官方程式碼等程式碼倉庫中,我們總會在某個目錄級別見到internal目錄。它表示私有應用程式和庫程式碼,也就是你不希望其他專案中匯入的程式碼,一般儲存一些比較專屬於當前專案的程式碼包。這是在程式碼編譯階段就會被限制的,該目錄下的程式碼不可被外部訪問到。

internal目錄並不侷限在根目錄,在各級子目錄中也可以有internal子目錄,也會同樣起到作用。

/config

config目錄或者configs目錄顧名思義就是配置檔案或者配置檔案模板所在的資料夾。

/test

test目錄經常用於存放整個應用的測試、測試資料及一些整合測試等,相較於單元測試在每個go檔案對應的目錄下,test目錄偏向於整體,當然在某些子專案內也會有區域性專案的測試會放在子專案的test中。

/docs

各類文件所在目錄。

/third_party

可以放一些第三方的資源工具檔案。


應用

專案地址:https://github.com/Codexiaoyi/tf_server

以上就是一些常見的目錄,還有一些/api、/example、/cmd等等也算是比較常見的目錄,目錄功能也顯而易見。各種型別的專案的目錄結構都不同,我這還是通過一個單體的應用的常用目錄結構進行舉例。

可以看到當前做到一半的專案,根目錄下已經變得奇奇怪怪了,尤其是util資料夾裡面放了各種東西(自己都看不下去了),接下來我們來做改造~

①我們將根目錄結構調整一下

②我們需要將原來的util資料夾下的jwt元件、log日誌元件、oss物件工具放到pkg資料夾中,並做好與本專案的解耦。

③將原來的util資料夾下的response和errmsg這些與當前專案強耦合的包放到internal中。

這樣我們的根目錄就變得十分清真,後續可以再加test、docs等等目錄,也不會顯得專案雜亂無章。最後我們來看看新的目錄結構:

通過這篇隨筆可以看出在go專案中有一些“潛規則”,比如剛入門的時候我們不知道各個專案中的internal和pkg資料夾表示腎麼含義,當然還是那句話,專案的目錄結構並沒有一個強制性規範,我們應該不斷看優秀的專案的結構目錄,不斷優化自己的架構意識,使得自己專案的擴充套件性加大的同時還能保證清晰

程式碼是給人看的!

相關文章