日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Go-项目结构和代码组织

發(fā)布時間:2023/11/29 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Go-项目结构和代码组织 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

簡介

做大量的輸入,通過對比、借鑒,加上自己的經驗,產出一個盡可能優(yōu)的方案。

開源界優(yōu)秀項目的結構示例

因為最新的 Go 版本已經使用 module 作為版本依賴,所以,所有項目的 vendor 我都忽略,建議直接使用 module 來管理依賴,而且較好的解決某些庫國內訪問不了的問題,參考:https://studygolang.com/topics/8737

Docker

https://github.com/moby/moby

├── api // 存放對外公開的 API 規(guī)則 ├── builder // 存放構建腳本等 ├── cli // 命令行的主要邏輯 ├── cmd // 存放可執(zhí)行程序,main 包放這個目錄中 ├── contrib // 存放一些有用的腳本或文件,但不是項目的核心部分 ├── docs // 存放文檔 ├── internal // 只在本項目使用的包(私有) ├── pkg // 本項目以及其他項目可以使用的包(公有) ├── plugin // 提供插件功能

Kubernetes

https://github.com/kubernetes/kubernetes

├── api ├── build // 存放構建腳本等 ├── cmd ├── docs ├── pkg ├── plugin ├── test // 單元測試之外的測試程序、測試數(shù)據(jù) ├── third_party // 經過修改的第三方的代碼

Gogs

https://github.com/gogs/gogs

├── cmd ├── conf // 對配置進行解析 ├── docker // 存放 docker 腳本 ├── models // MVC 中的 model ├── pkg ├── public // 靜態(tài)公共資源,實際項目會將其存入 CDN ├── routes // 路由 ├── scripts // 腳本文件 ├── templates // 存放模板文件 ``### influxdb https://github.com/influxdata/influxdb

├── cmd
├── docker
├── docs
├── http // 存放 HTTP Handler 等,相當于 MVC 的 Controller
├── internal
├── models
├── pkg
├── scripts
```

開源項目小結

總體上,這些優(yōu)秀開源項目,沒有統(tǒng)一一致的目錄結構方式,但大體上,有一些通用的地方,這就有了** https://github.com/golang-standards/project-layout **這個項目。

標準 Go 項目布局(結構)

https://github.com/golang-standards/project-layout 項目總結了 Go 項目的布局,我們一起看看這些主要的目錄。

/cmd

該目錄用于存放 Go 項目的入口,即 main.main。一般來說,我們應該在 cmd 目錄下創(chuàng)建子目錄,子目錄名稱代表可執(zhí)行程序的名稱。上面列出的優(yōu)秀開源項目基本上遵循了這一規(guī)則。
事實上,Go 語言本身,以及 github.com/golang/tools 都采用了 cmd 及其子目錄的形式,所以咱們的項目沒有理由不使用。
一般來說,該目錄中的代碼應該盡可能少。

/internal

這是 Go 包的一個特性,放在該包中的代碼,表明只希望項目內部使用,是項目或庫私有的,其他項目或庫不能使用。

/pkg

該包可以和 internal 對應,是公開的。一般來說,放在該包的代碼應該和具體業(yè)務無關,方便本項目和其他項目重用。當你決定將代碼放入該包時,你應該對其負責,因為別人很可能使用它。
因為 GOPATH 中有一個目錄就是 pkg,所以,社區(qū)有些人對該目錄不太能接受。但不管怎么樣,開源界有很多優(yōu)秀項目在使用它,這里有一些使用它的項目列表:
https://github.com/golang-standards/project-layout/blob/master/pkg/README.md

/api

該目錄用來存放 OpenAPI/Swagger 規(guī)則說明, JSON 格式定義, 協(xié)議定義文件等。也有可能用來存放具體的對外公開 API,比如 Docker:https://github.com/moby/moby/tree/master/api/server 。

/init

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

/scripts

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

/build

該目錄用于存放打包和持續(xù)集成相關腳本。

/test

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

Go 語言源碼倉庫中就有 test 目錄。

/docs

存放設計和用戶文檔

/tools

存放項目的支持工具。

/third_party

從第三代碼包抽取過來的。根據(jù)官方建議,包名不應該有 _,所以本人不建議使用。真有這樣的需要,考慮命名為 thirdparty。

轉載于:https://www.cnblogs.com/Paul-watermelon/p/11230197.html

總結

以上是生活随笔為你收集整理的Go-项目结构和代码组织的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。