最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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關鍵字引入。

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

應用項目

對于應用項目,其目錄布局方式我們可以參考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引入項目的包時,路徑會比較短,比如我們有一個結構體A,放在pkg1包下與放在根目錄下,其引路徑分別是:

import "demo"

import "demo/pkg1"

小結

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

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

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

相關文章

  • go語言net包rpc遠程調(diào)用的使用示例

    go語言net包rpc遠程調(diào)用的使用示例

    本篇文章主要介紹了go語言net包rpc遠程調(diào)用的使用示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • 詳解Go語言如何利用高階函數(shù)寫出優(yōu)雅的代碼

    詳解Go語言如何利用高階函數(shù)寫出優(yōu)雅的代碼

    高階函數(shù)(Hiher-order?Function)定義為:滿足下列條件之一的函數(shù):接收一個或多個函數(shù)作為參數(shù);返回值是一個函數(shù)。本文為大家介紹了如何利用高階函數(shù)寫出優(yōu)雅的代碼,希望對大家有所幫助
    2023-01-01
  • go語言實現(xiàn)同步操作項目示例

    go語言實現(xiàn)同步操作項目示例

    本文主要介紹了go語言實現(xiàn)同步操作項目示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • Go語言命令行參數(shù)及cobra使用方法

    Go語言命令行參數(shù)及cobra使用方法

    Cobra是關于golang的一個命令行解析庫,用它能夠快速創(chuàng)建功能強大的 cli應用程序和命令行工具,本文主要介紹了Go語言命令行參數(shù)及cobra使用方法,感興趣的可以了解一下
    2024-01-01
  • Go語言使用時會遇到的錯誤及解決方法詳解

    Go語言使用時會遇到的錯誤及解決方法詳解

    這篇文章主要為大家詳細介紹了Go語言使用時常常會遇到的一些錯誤及解決方法,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-07-07
  • 詳解如何利用GORM實現(xiàn)MySQL事務

    詳解如何利用GORM實現(xiàn)MySQL事務

    為了確保數(shù)據(jù)一致性,在項目中會經(jīng)常用到事務處理,對于MySQL事務相信大家應該都不陌生。這篇文章主要總結一下在Go語言中Gorm是如何實現(xiàn)事務的;感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助
    2022-09-09
  • Golang時間及時間戳的獲取轉換超全面詳細講解

    Golang時間及時間戳的獲取轉換超全面詳細講解

    說實話,golang的時間轉化還是很麻煩的,最起碼比php麻煩很多,下面這篇文章主要給大家介紹了關于golang時間/時間戳的獲取與轉換的相關資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Go 語言中的死鎖問題解決

    Go 語言中的死鎖問題解決

    本文主要介紹了Go 語言中的死鎖問題解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • 詳解Golang中哪些類型可以作為map的key

    詳解Golang中哪些類型可以作為map的key

    在 Go 語言中,map 是一種內(nèi)置的關聯(lián)數(shù)據(jù)結構類型,由一組無序的鍵值對組成,每個鍵都是唯一的,并與一個對應的值相關聯(lián),本文將詳細介紹哪些類型的變量可以作為 map 的鍵,并通過實例進行說明,感興趣的朋友可以參考下
    2024-01-01
  • golang中sync.Once只執(zhí)行一次的原理解析

    golang中sync.Once只執(zhí)行一次的原理解析

    在某些場景下,我們希望某個操作或者函數(shù)僅被執(zhí)行一次,比如單例模式的初始化,一些資源配置的加載等,golang中的sync.Once就實現(xiàn)了這個功能,本文就和大家一起解析sync.Once只執(zhí)行一次的原理,需要的朋友可以參考下
    2023-09-09

最新評論

自治县| 华坪县| 邯郸市| 石景山区| 弥勒县| 黄大仙区| 大同县| 乌什县| 凤山市| 旬阳县| 柞水县| 榆中县| 荣昌县| 西平县| 上杭县| 镇巴县| 比如县| 忻州市| 绥江县| 漾濞| 嘉荫县| 嵊州市| 门源| 随州市| 固原市| 凤城市| 织金县| 阿拉善盟| 建水县| 朔州市| 虞城县| 台东县| 双鸭山市| 得荣县| 甘孜| 和平县| 金华市| 丹巴县| 呼图壁县| 根河市| 涞源县|