欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入了解Go項目標準目錄布局

 更新時間:2022年05月07日 10:00:02   作者:程序員讀書  
本文主要介紹了Go項目標準目錄布局,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

很多的時候,我們開發(fā)一個簡單的Go項目的時候并不需要糾結(jié)于項目的的目錄布局,因為我們會將所有g(shù)o源碼文件扔在項目的根目錄中,就像下面這樣:

demo
├── main.go
├── model.go
└── service.go

但當我們的項目變得復雜的時候,我們就需要好好思考怎么組織我們的項目了,這時候你可能會想,用官方的Go項目目錄布局就好了,然而Go的官方并沒有給出一個標準的Go項目標準目錄布局。

目前,Go社區(qū)開發(fā)者比較推薦的是project-layout項目中給出的目錄布局,如:

demo
├── api
├── assets
├── build
├── cmd
├── configs
├── deployments
├── docs
├── examples
├── githooks
├── init
├── internal
├── pkg
├── scripts
├── test
├── third_party
├── tools
├── vendor
├── web
└── website

然而官方并不推薦這種項目布局方式,下面是Go團隊開發(fā)leader Russ Cox對project-layout目錄的意見:

大體上,我們可以將Go的項目分為兩類,應用項目與庫項目。

  • 應用項目:即包含可執(zhí)行文件的項目,項目開發(fā)后,需要編譯成可執(zhí)行文件并上線運行。

  • 庫項目:庫文件一般用于暴露Api,被其他項目通過import關(guān)鍵字引入。

應用項目與庫項目的目錄布局方式稍有差異。

應用項目

對于應用項目,其目錄布局方式我們可以參考Go項目自身,以及一些使用Go語言開發(fā)的優(yōu)秀開源項目(如Docker,Kubernetes,etcd)等,通過研究這些項目的目錄布局,我們可以抽象出以下標準目錄:

demo
├── cmd
│   ├── app1
│   │   └── main.go
│   └── app2
│       └── main.go
├── go.mod
├── go.sum
├── internal
│   ├── pkga
│   │   └── pkg_a.go
│   └── pkgb
│       └── pkg_b.go
├── pkg1
│   └── pkg1.go
├── pkg2
│   └── pkg2.go
└── vendor

cmd

可執(zhí)行文件目錄,如果一個項目有多個可執(zhí)行文件,可以放在不同的子目錄中,如上面例子中的app1和app2目錄。

internal

項目內(nèi)部私有代碼,其他項目引入時會報錯。

pkgN:

注意,這里并不是說一定要pkg為前綴來命名,你可以對取任意符合包命名規(guī)范的名稱,比如service,model等

即上面示例中的pkg1與pkg2,pkgN包與internal包一樣存放項目的依賴代碼,但存儲在這里的代碼,可以被其項目引入。

vendor

這個目錄用于存儲項目的依賴包,但由于現(xiàn)今Go項目都是使用go module進行依賴管理,因此這個目錄是可省略的。

如果我們的項目只有一個可執(zhí)行文件,可以將main.go文件直接寫在根目錄,而vendor可以省略,因此,項目目錄可以進一步精簡為:

demo
├── go.mod
├── go.sum
├── internal
│   ├── pkga
│   │   └── pkg_a.go
│   └── pkgb
│       └── pkg_b.go
├── main.go
├── pkg1
│   └── pkg1.go
└── pkg2
    └── pkg2.go

庫項目

庫項目不需要可執(zhí)行文件,相比于應用項目,省略了cmd目錄,其標準目錄下:

demo
├── go.mod
├── go.sum
├── internal
│   ├── pkga
│   │   └── pkg_a.go
│   └── pkgb
│       └── pkg_b.go
├── pkg1
│   └── pkg1.go
└── pkg2
    └── pkg2.go

如果我們的庫項目比較簡單,可以采用平鋪式項目布局,即將所有的功能寫在一個包里,所有源碼目錄放在根目錄下,如:

demo
├── feature1.go
├── feature2.go
├── feature3.go
├── go.mod
└── go.sum

平鋪式的項目布局非常適合簡單的庫項目,事實上,很多復雜的庫項目也會將大量的代碼放在根目錄下,因為這樣,其他項目使用import引入項目的包時,路徑會比較短,比如我們有一個結(jié)構(gòu)體A,放在pkg1包下與放在根目錄下,其引路徑分別是:

import "demo"

import "demo/pkg1"

小結(jié)

好了,閱讀到這里,想必你已經(jīng)了解了Go應用項目與庫項目目錄布局的不同了吧。

不過,由于Go官方項目指定的項目布局,因此上述的幾種項目目錄都是社區(qū)開發(fā)的約定俗成,并不具備強制性,你也可以定制自己的Go項目目錄布局,不過我想,使用社區(qū)開發(fā)都遵循的目錄規(guī)范,還是有助于降低團隊開發(fā)人員的認知與交流成本的。

到此這篇關(guān)于深入了解Go項目標準目錄布局的文章就介紹到這了,更多相關(guān)Go標準目錄布局內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang對mongodb進行聚合查詢詳解

    Golang對mongodb進行聚合查詢詳解

    這篇文章主要為大家詳細介紹了Golang對mongodb進行聚合查詢的方法,文中的示例代碼講解詳細,對我們學習Golang有一點的幫助,需要的可以參考一下
    2023-02-02
  • Go 語言下基于Redis分布式鎖的實現(xiàn)方式

    Go 語言下基于Redis分布式鎖的實現(xiàn)方式

    本篇文章將詳細介紹如何正確地實現(xiàn)Redis分布式鎖,下面通過一個項目基于 Redis 的分布式鎖能夠提供哪些分布鎖特性,本文給大家介紹的非常詳細,需要的朋友參考下吧
    2021-06-06
  • go語言實現(xiàn)短信發(fā)送實例探究

    go語言實現(xiàn)短信發(fā)送實例探究

    這篇文章主要為大家介紹了go語言實現(xiàn)短信發(fā)送實例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • Golang中設(shè)置全局變量并在其他文件中使用

    Golang中設(shè)置全局變量并在其他文件中使用

    全局變量是被整個程序都可見的變量,通常用于存儲程序中需要共享的數(shù)據(jù),本文就來介紹一下Golang中設(shè)置全局變量并在其他文件中使用的方法,感興趣的可以了解一下
    2024-01-01
  • 解決Goland中利用HTTPClient發(fā)送請求超時返回EOF錯誤DEBUG

    解決Goland中利用HTTPClient發(fā)送請求超時返回EOF錯誤DEBUG

    這篇文章主要介紹了解決Goland中利用HTTPClient發(fā)送請求超時返回EOF錯誤DEBUG,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang int64轉(zhuǎn)int的方法

    golang int64轉(zhuǎn)int的方法

    這篇文章主要介紹了golang int64轉(zhuǎn)int,本文給大家提供兩種方法 ,將 golang int64 轉(zhuǎn)換為golang int,結(jié)合實例代碼給大家分享轉(zhuǎn)換方法,需要的朋友可以參考下
    2023-01-01
  • 深入解析golang中的標準庫flag

    深入解析golang中的標準庫flag

    Go語言內(nèi)置的flag包實現(xiàn)了命令行參數(shù)的解析,flag包使得開發(fā)命令行工具更為簡單,下面通過本文給大家詳細介紹下golang中的標準庫flag相關(guān)知識,感興趣的朋友一起看看吧
    2021-11-11
  • GO使用阿里云,解決go get下載項目慢或無法下載的情況

    GO使用阿里云,解決go get下載項目慢或無法下載的情況

    這篇文章主要介紹了GO使用阿里云,解決go get下載項目慢或無法下載的情況,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Go導入不同目錄下包報錯的解決方法

    Go導入不同目錄下包報錯的解決方法

    包(package)是多個Go源碼的集合,是一種高級的代碼復用方案,下面這篇文章主要給大家介紹了關(guān)于Go導入不同目錄下包報錯的解決方法,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2023-06-06
  • VSCode安裝go相關(guān)插件失敗的簡單解決方案

    VSCode安裝go相關(guān)插件失敗的簡單解決方案

    這篇文章主要給大家介紹了關(guān)于VSCode安裝go相關(guān)插件失敗的簡單解決方案,VSCode是我們開發(fā)go程序的常用工具,最近安裝的時候遇到了些問題,需要的朋友可以參考下
    2023-07-07

最新評論