首頁 > 軟體

建立Go工程化專案佈局詳解

2022-09-28 14:00:49

正文

如果你嘗試學習Go,或者你正在為自己建立一個Poc或者一個玩具專案,這個專案佈局是沒有啥必要的,從一些簡單的事情開始(一個main檔案綽綽有餘)。當有更多的人蔘與這個專案的時候,你講需要更多的結構,包括需要一個tookit來方便生成專案的模板,儘可能大家統一的工程目錄佈局

本文章圍繞github.com/golang-stan… 進行說明

/cmd

本專案的主幹。 每個應用程式的目錄名應該與你想要的可執行檔案的名稱相匹配(例如:/cmd/myapp)

不要在這個專案中放置太多的程式碼,如果你認為程式碼匯入並在其他專案中使用,那麼他應該位於/pkg目錄中,如果程式碼不是可重用的,或者你不希望其他人重用他,請將該程式碼放到/internal目錄中。

/internal

不希望對外進行共用的程式碼,internal目錄中也可以放置一些子包結構,已做到更加細化的切分,如:

|--internal
|   |
|   |--demo
|       |--biz
|       |--data
|       |--service

/pkg

外部應用程式可以使用的程式碼庫,(例如:/pkg/publiclib)其他專案會匯入這些程式碼庫,所以放入到該目錄下的程式碼要三思~注意:/internal目錄是確保私有包不可匯入的私有方法,因為他是由Go在編譯時強制執行的。/pkg 仍然是一種更好的方式,可以顯示的表示目錄中的程式碼對於其他人來說是安全使用的好方法。

/pkg目錄內可以參考GO標準庫的組織形式,按照功能分類,/internal/pkg一般用於專案內的,跨多個應用的公共共用程式碼,但是其作用域僅在單個工程內。

|--pkg
|  |
|  |--cache
|  |   |--memcache
|  |   |--redis
|  |
|  |--conf
|      |--dsn
|      |--env
|      |--flagvar
|      |--paladin

/docs,/example,/pkg,/third_parth,/tools

這些跟上文說的/pkg/internal都同屬根目錄下的目錄結構

  • /docs 放置一些專案說明檔案
  • /example 放置一些專案的使用範例
  • /thrid_parth 三方的一些依賴檔案,如:idl檔案
  • /tools 放置一些專案的腳手架工具,程式碼生成工具等

基礎庫專案佈局

每個公司都應該為不同的微服務建立一個統一的kit基礎包工具集。 基礎庫tookit為一個獨立的專案,公司級建議只有一個,按照功能來拆分會帶來不少的管理工作,因此建議並整合

kit包應該具備的特點

  • 統一
  • 標準庫方式佈局
  • 高度抽象
  • 支援外掛

例如下面的佈局

|--cache
|    |--memcache
|         |--test
|    |--redis
|         |--test
|--conf
|    |--dsn
|    |--env 
|    |--flagvar
|    |--paladin
|          |--apollo
|               |--internal
|                     |--mockserver
|--container
|    |--group
|    |--pool
|    |--queue
|         |--aqm
|--database
|    |--hbase
|    |--sql
|    |--tidb
|--echo
|    |--types
|--log
|    |--internal
|         |--core
|         |--filewriter
|

應用程式專案佈局

/api

API協定定義目錄, xxapi.proto protobuf檔案以及生成go的檔案,我們通常把api檔案定義在proto 檔案中描述

/configs

組態檔模板或者預設設定

/test

額外的外部測試應用程式和測試資料,你可以隨時根據需求構造測試目錄,對於較大的專案,有一個資料子目錄是有意義的,例如你可以使用/test/testdata(如果你需要忽略目錄中的內容)請注意,Go還會以“.”或者“_”開頭的目錄或者檔案,因此在如何命名測試資料目錄方便,有著很大的靈活性。

不應該包含/src目錄

有些Go專案確實有src目錄,這是因為開發人員通常有Java的開發背景。

/internal

/biz

業務邏輯的組裝層,類似DDD中的domain,

/data

業務資料存取,包含cache和db等封裝,實現了biz的repo介面,我們可能會把data和dao混合在一起,data偏重業務的含義,他所做的是將領域物件重新拿出來,我們去掉了DDD的infra層,

/service

實現了api定義的服務層,類似DDD的applocation層,處理DTO到biz領域實體的轉換,(DTO->DO)同事協同個類biz互動,但是不應該處理複雜邏輯

佈局示意圖

|--api
|--configs
|--test
|--internal
|       |--biz
|       |--data
|       |--service

資料流向

以上就是建立Go工程化專案佈局詳解的詳細內容,更多關於Go工程化專案佈局的資料請關注it145.com其它相關文章!


IT145.com E-mail:sddin#qq.com