Go 項目標準布局(結構)

https://github.com/golang-standards/project-layout 項目總結了 Go 項目的布局,這是Go應用程序項目的基本布局,并不是Go核心開發(fā)團隊定義的官方標準宴卖;但是席纽,這是Go生態(tài)系統(tǒng)中的一種常見的項目布局模式。

Go目錄

/cmd

該目錄用于存放 Go 項目的入口,即 main.go衣迷。一般來說畏鼓,我們應該在 cmd 目錄下創(chuàng)建子目錄,子目錄名稱代表可執(zhí)行程序的名稱(例如/cmd/myapp)壶谒。上面列出的優(yōu)秀開源項目基本上遵循了這一規(guī)則云矫。
一般來說,該目錄中的代碼應該盡可能少汗菜。如果認為該代碼可以導入并在其他項目中使用让禀,那么它應該位于/pkg目錄中。如果該代碼不可重用陨界,或者不希望其他人重用它巡揍,則將該代碼放在/internal目錄中。

/internal

這是 Go 包的一個特性菌瘪,放在該包中的代碼腮敌,表明只希望項目內(nèi)部使用,是項目或庫私有的俏扩,其他項目或庫不能使用糜工。請注意,不限于頂層internal目錄录淡,internal在項目樹的任何級別上都可以有多個目錄捌木。
可以選擇向內(nèi)部包中添加一些額外的結構,以分隔共享和非共享內(nèi)部代碼嫉戚。它不是必需的(尤其是對于較小的項目)刨裆,但是最好有視覺提示來顯示包的用途。實際應用程序代碼可以進入/internal/app目錄(例如/internal/app/myapp)彬檀,而這些應用程序共享的代碼可以進入/internal/pkg目錄(例如/internal/pkg/myprivlib)帆啃。

/pkg

該包可以和 internal 對應,是公開的窍帝。一般來說纪挎,放在該包的代碼應該和具體業(yè)務無關搪花,方便本項目和其他項目重用缝驳。當你決定將代碼放入該包時栏尚,你應該對其負責,因為別人很可能使用它拥峦。
如果應用程序項目很小贴膘,并且嵌套的額外層次不會增加太多價值(除非您真的想要,請不要使用它略号。當它變得足夠大并且您的根目錄變得非常復雜時(特別是如果您有很多非Go應用程序組件)刑峡,請考慮一下洋闽。

/vendor

應用程序依存關系,GO1.13啟用go module來代替突梦,并不需要vendor目錄了诫舅。

server application目錄

/api

該目錄用來存放 OpenAPI/Swagger 規(guī)則說明, JSON 格式定義, 協(xié)議定義文件等。也有可能用來存放具體的對外公開 API.

web application 目錄

/web

Web應用程序特定的組件:靜態(tài)Web資產(chǎn)宫患,服務器端模板和SPA刊懈。

common application目錄

/configs

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

/init

存放隨著系統(tǒng)自動啟動腳本娃闲,如:systemd, upstart, sysv虚汛;或者通過 supervisor 進行進程管理的腳本。

/scripts

存放 build皇帮、install卷哩、analysis 等操作腳本。這些腳本使得項目根目錄的 Makefile 很簡潔属拾。

/build

該目錄用于存放打包和持續(xù)集成相關腳本将谊。將云(AMI),容器(Docker)渐白,操作系統(tǒng)(deb瓢娜,rpm,pkg)軟件包配置和腳本放在/build/package目錄中礼预。
將CI(travis,circle虏劲,drone)配置和腳本放在/build/ci目錄中托酸。請注意,某些配置項工具(例如Travis CI)對于其配置文件的位置非常挑剔柒巫。嘗試將配置文件放在/build/ci目錄中励堡,將它們鏈接到CI工具期望它們的位置(如果可能)。

/deployments

IaaS堡掏,PaaS应结,系統(tǒng)和容器編排部署配置和模板(docker-compose,kubernetes / helm泉唁,mesos鹅龄,terraform,bosh)亭畜。

/test

一般用來存放除單元測試扮休、基準測試之外的測試,比如集成測試拴鸵、測試數(shù)據(jù)等玷坠。

其他目錄

/docs

設計和用戶文檔(除了godoc生成的文檔之外)蜗搔。

/tools

存放項目的支持工具。請注意八堡,這些工具可以從/pkg和/internal目錄導入代碼樟凄。

/examples

應用程序或公共庫的示例。

/third_party

外部幫助程序工具兄渺,分叉的代碼和其他第三方工具(例如Swagger UI)缝龄。

/githooks

githooks

/assets

與資源庫一起使用的其他資產(chǎn)(圖像,徽標等)溶耘。

/website

如果不使用Github頁面二拐,則在這里放置項目的網(wǎng)站數(shù)據(jù)。

不應該擁有的目錄

/src

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末凳兵,一起剝皮案震驚了整個濱河市百新,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庐扫,老刑警劉巖饭望,帶你破解...
    沈念sama閱讀 221,635評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異形庭,居然都是意外死亡铅辞,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評論 3 399
  • 文/潘曉璐 我一進店門萨醒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來斟珊,“玉大人,你說我怎么就攤上這事富纸《诓龋” “怎么了?”我有些...
    開封第一講書人閱讀 168,083評論 0 360
  • 文/不壞的土叔 我叫張陵晓褪,是天一觀的道長堵漱。 經(jīng)常有香客問我,道長涣仿,這世上最難降的妖魔是什么勤庐? 我笑而不...
    開封第一講書人閱讀 59,640評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮好港,結果婚禮上愉镰,老公的妹妹穿的比我還像新娘。我一直安慰自己钧汹,他們只是感情好岛杀,可當我...
    茶點故事閱讀 68,640評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著崭孤,像睡著了一般类嗤。 火紅的嫁衣襯著肌膚如雪糊肠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,262評論 1 308
  • 那天遗锣,我揣著相機與錄音货裹,去河邊找鬼。 笑死精偿,一個胖子當著我的面吹牛弧圆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笔咽,決...
    沈念sama閱讀 40,833評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼搔预,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了叶组?” 一聲冷哼從身側(cè)響起拯田,我...
    開封第一講書人閱讀 39,736評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎甩十,沒想到半個月后船庇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,280評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡侣监,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,369評論 3 340
  • 正文 我和宋清朗相戀三年鸭轮,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橄霉。...
    茶點故事閱讀 40,503評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡窃爷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出姓蜂,到底是詐尸還是另有隱情按厘,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評論 5 350
  • 正文 年R本政府宣布覆糟,位于F島的核電站,受9級特大地震影響遮咖,放射性物質(zhì)發(fā)生泄漏滩字。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,870評論 3 333
  • 文/蒙蒙 一御吞、第九天 我趴在偏房一處隱蔽的房頂上張望麦箍。 院中可真熱鬧,春花似錦陶珠、人聲如沸挟裂。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽诀蓉。三九已至栗竖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間渠啤,已是汗流浹背狐肢。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留沥曹,地道東北人份名。 一個月前我還...
    沈念sama閱讀 48,909評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像妓美,于是被迫代替她去往敵國和親僵腺。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,512評論 2 359