創(chuàng)建Go工程化項目布局詳解_第1頁
創(chuàng)建Go工程化項目布局詳解_第2頁
創(chuàng)建Go工程化項目布局詳解_第3頁
創(chuàng)建Go工程化項目布局詳解_第4頁
創(chuàng)建Go工程化項目布局詳解_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第創(chuàng)建Go工程化項目布局詳解目錄正文/cmd/internal/pkg/docs,/example,/pkg,/third_parth,/tools基礎(chǔ)庫項目布局kit包應(yīng)該具備的特點應(yīng)用程序項目布局/api/configs/test不應(yīng)該包含/src目錄/internal/biz/data/service布局示意圖數(shù)據(jù)流向

正文

如果你嘗試學習Go,或者你正在為自己建立一個Poc或者一個玩具項目,這個項目布局是沒有啥必要的,從一些簡單的事情開始(一個main文件綽綽有余)。當有更多的人參與這個項目的時候,你講需要更多的結(jié)構(gòu),包括需要一個tookit來方便生成項目的模板,盡可能大家統(tǒng)一的工程目錄布局

本文章圍繞/golang-stan進行說明

/cmd

本項目的主干。每個應(yīng)用程序的目錄名應(yīng)該與你想要的可執(zhí)行文件的名稱相匹配(例如:/cmd/myapp)

不要在這個項目中放置太多的代碼,如果你認為代碼導(dǎo)入并在其他項目中使用,那么他應(yīng)該位于/pkg目錄中,如果代碼不是可重用的,或者你不希望其他人重用他,請將該代碼放到/internal目錄中。

/internal

不希望對外進行共享的代碼,internal目錄中也可以放置一些子包結(jié)構(gòu),已做到更加細化的切分,如:

|--internal

||--demo

||--biz

||--data

||--service

/pkg

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

/pkg目錄內(nèi)可以參考GO標準庫的組織形式,按照功能分類,/internal/pkg一般用于項目內(nèi)的,跨多個應(yīng)用的公共共享代碼,但是其作用域僅在單個工程內(nèi)。

|--pkg

||--cache

|||--memcache

|||--redis

||--conf

||--dsn

||--env

||--flagvar

||--paladin

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

這些跟上文說的/pkg和/internal都同屬根目錄下的目錄結(jié)構(gòu)

/docs放置一些項目說明文檔/example放置一些項目的使用示例/thrid_parth三方的一些依賴文件,如:idl文件/tools放置一些項目的腳手架工具,代碼生成工具等

基礎(chǔ)庫項目布局

每個公司都應(yīng)該為不同的微服務(wù)建立一個統(tǒng)一的kit基礎(chǔ)包工具集?;A(chǔ)庫tookit為一個獨立的項目,公司級建議只有一個,按照功能來拆分會帶來不少的管理工作,因此建議并整合

kit包應(yīng)該具備的特點

統(tǒng)一標準庫方式布局高度抽象支持插件

例如下面的布局

|--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

應(yīng)用程序項目布局

/api

API協(xié)議定義目錄,toprotobuf文件以及生成go的文件,我們通常把api文檔定義在proto文件中描述

/configs

配置文件模板或者默認配置

/test

額外的外部測試應(yīng)用程序和測試數(shù)據(jù),你可以隨時根據(jù)需求構(gòu)造測試目錄,對于較大的項目,有一個數(shù)據(jù)子目錄是有意義的,例如你可以使用/test/testdata(如果你需要忽略目錄中的內(nèi)容)請注意,Go還會以.或者_開頭的目錄或者文件,因此在如何命名測試數(shù)據(jù)目錄方便,有著很大的靈活性。

不應(yīng)該包含/src目錄

有些Go項目確實有src目錄,這是因為開發(fā)人員通常有Java的開發(fā)背景。

/internal

/biz

業(yè)務(wù)邏輯的組裝層,類似DDD中的domain,

/data

業(yè)務(wù)數(shù)據(jù)訪問,包含cache和db等封裝,實現(xiàn)了biz的repo接口,我們可能會把data和dao混合在一起,data偏重業(yè)務(wù)的含義,他所做的是將領(lǐng)域?qū)ο笾匦履贸鰜?,我們?nèi)サ袅薉DD的infra層,

/service

實現(xiàn)了api定義的服務(wù)層,類似DDD的applocation層,處理DTO到biz領(lǐng)域?qū)嶓w的轉(zhuǎn)換,(DTO-DO)同事協(xié)同個類biz交互,但是不應(yīng)該處理復(fù)雜邏輯

布局示意圖

|--api

|--configs

|

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論