精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何優雅的組織Golang項目結構

開發 前端
基于Clean Architecture原則的go-clean-template在需要將業務邏輯、數據訪問和接口層明確分離以提高可維護性和可測試性的項目中表現出色。

一個Go項目的結構設計始終遵循Go語言的簡潔高效理念。一個合理和良好的布局可以提高代碼的可讀性,簡化依賴管理,并優化編譯過程。

像cmd、internal和docs這樣的目錄是標準Go項目的基礎,起著不同的作用。比如,cmd目錄是可執行文件的入口,docs是所有相關文檔的入口,而internal包含項目私有代碼。適當的包劃分可以避免循環依賴,便于單元測試和代碼復用。

然而,這種Go項目布局可能導致過多的目錄層級和包劃分,會給管理工作帶來負擔,并有時讓初學者感到不知所措。

因此,在設計時如何把握什么算是“合理”,就成了關鍵。

這篇文章,讓我們嘗試在目錄結構和包設計中找到簡潔和功能之間的平衡,使項目能夠在變化中健康迭代。

標準布局

像cmd和internal這樣的目錄結構是由一些Go語言社區的開發者在系統總結之前進行了總結,并在標準Go項目布局中得到了進一步的概括,該項目已經獲得了超過4萬個star。盡管其起源是一個提示,但標準布局已經成為Go項目目錄結構的事實標準。

這并不是由核心Go開發團隊定義的官方標準。

my-app/ # Root directory of the project
|── cmd/ # Executables directory
└── myapp/ # Main application package
└── main.go # Main application entry point
|── internal/ # Private application and library code
└── package1/ # Internal package 1
|── pkg/ # Library code that can be exported
└── package2/ # External package 2
|── api/ # API protocol definitions directory
|── configs/ # Configuration files directory
|── deployments/ # Deployment configurations and scripts
|── scripts/ # Scripts for build, install, analysis, etc.
|── build/ # Packaging and Continuous Integration
|── tests/ # Additional external test apps and test data
|── docs/ # Design and user documents
|── tools/ # Supporting tools for the project
|── examples/ # Application or public library examples
|── third_party/ # External helper tools, forked code, and other 3rd party utilities
|── githooks/ # Git hooks
|── assets/ # Other assets like images, logos, etc.
|── vendor/ # Dependency package directory (if using vendor mode)
|── go.mod # Module dependency file
|── go.sum # Module checksum file for dependency verification

如果你經常閱讀源代碼,你會輕易地發現,大多數在GitHub上知名的Go開源項目基本上都遵循上述布局,比如Kubernetes這個大型Go項目。

圖片圖片

讓我們簡單看一下。

  • 與Go模塊相關的go.mod和go.sum是必不可少的。
  • pkg目錄包含api、apis、kubectl等包,可應用于外部項目,比如基于Kubernetes的開發。
  • cmd包含了Kubernetes中各種命令行的main方法入口,比如kubectl.go。
  • api目錄存儲與openApiv3相關的json文件。
  • test目錄包含所有的e2e和集成測試代碼,根據不同的包進行了分別存儲。
  • third_party存儲第三方引用的工具,比如protobuf。
  • vendor用于存儲外部依賴,比如k8s.io、etcd等。
  • docs目錄目前為空。

當然,Kubernetes項目并不完全遵循標準布局,因為其規模較大。例如,許多Kubernetes腳本存儲在build和cluster目錄中,而不是scripts目錄。還有一些用于特定需求的目錄,比如hacks和staging。

官方布局

2023年發布的文章《組織Go模塊》揭示了Go團隊對布局的不同觀點,提供了根據項目復雜性設計目錄結構的參考,涵蓋了具有少量Go文件、單個cmd命令或簡單包的項目,以及具有多個cmds和多個包的項目。

對它們進行總結如下,并將其作為下一節的官方布局。

my-module/                 # Root directory for the module with go.mod
├── go.mod                 # Module's dependency file
├── go.sum                 # The module's checksums for dependency validation
├── cmd/                   # Directory for commands (each subdirectory here is a main package)
│   └── my-app/            # Main application for this module
│       └── main.go        # Main application entry point
├── internal/              # Internal packages meant for use only within this module
│   └── mylib/             # An internal package example
│       └── mylib.go       # The package's specific code
├── api/                   # API protocol definitions, e.g., protocol buffer files
├── web/                   # Web application specific components: static files, server-side templates, SPAs, etc.
├── pkg/                   # Library code that's ok to use by external applications (deprecated by some in the community)
│   └── mypkg/             # An example package that could be imported by other applications
│       └── mypkg.go       # Package code
├── README.md              # Project README file
├── LICENSE                # License file
├── .gitignore             # Specifies intentionally untracked files to ignore
└── ...                    <-- Other directories and files as needed

標準布局與官方布局

這兩種布局有一些共同的思想。

  • 模塊化。不同的功能會被放入不同的包中,以提高可重用性。
  • 提高可見性。根據功能將不同的包存儲在不同的目錄中,以提高可讀性。

基于這些概念,標準布局中有一個通用的cmd目錄來存儲命令行代碼,子包用于保存多個命令,internal目錄用于保存不對外共享的代碼。目錄路徑和包名稱與main.go作為入口文件保持一致。

但是,它們對于像pkg和util這樣的目錄有不同的考慮,例如,Russ Cox反對以pkg和util等模糊方式命名軟件庫。此外,由于社區的貢獻,標準布局比官方建議覆蓋范圍更廣,添加了像scripts和build這樣的目錄。

Go-Clean-Template

標準布局和官方布局都是通用的,將項目分為cmd項目和非cmd項目,因此對于包含entity和dao等多個包的復雜項目(如使用Go開發的Web項目),它們并不是首選。go-clean-template則專為這類Web項目量身定制。

go-clean-template/       <-- Root directory of the project
├── cmd/                 <-- Main application entry points
│   └── appname/         <-- Specific startup logic and configuration for 'appname' app
│       └── main.go      <-- Main application startup entry
├── internal/            <-- Internal modules, not importable by external applications
│   ├── entity/          <-- Entities (business objects) of the application
│   ├── usecase/         <-- Use case layer containing business logic interfaces
│   ├── repository/      <-- Data storage interfaces
│   ├── handler/         <-- HTTP handlers for receiving requests and calling use cases
│   └── config/          <-- Configuration related code
├── pkg/                 <-- Public library code that can be imported by other projects
├── test/                <-- External testing code
├── .dockerignore        <-- Specifies files to ignore in Docker builds
├── .gitignore           <-- Specifies intentionally untracked files to ignore in Git
├── Dockerfile           <-- Docker configuration file for containerization
├── go.mod               <-- Go module dependencies file
├── go.sum               <-- Checksums for Go module dependencies
└── Makefile             <-- Makefile containing automation commands

作為標準布局的擴展,go-clean-template保留了pkg目錄,以便更好地管理眾多公共庫。它明確定義了像entity、repository、config等子包,省去了我們為它們命名的工作。它還有像test和integration-test這樣的目錄,用于放置相應的測試代碼,提高可讀性。

小結

本文帶大家深入研究了組織Go代碼庫的三種布局:

標準布局提供了一個由社區驅動的、廣泛適用的結構,非常適合需要清晰關注點分離的大型項目。

官方布局由Go的創建者認可,強調簡潔和靈活性,適用于各種項目,特別是那些優先考慮模塊管理的項目。

基于Clean Architecture原則的go-clean-template在需要將業務邏輯、數據訪問和接口層明確分離以提高可維護性和可測試性的項目中表現出色。

這三種范式適應不同的項目需求,每種都提供了一套可自適應和組合的指南。選擇其中之一取決于具體項目的要求、規模和復雜性。

責任編輯:武曉燕 來源: 程序新視界
相關推薦

2014-09-29 09:31:35

Angular

2020-11-23 14:16:42

Golang

2025-01-13 06:00:00

Go語言gRPC

2024-04-02 09:55:36

GolangColly開發者

2023-02-23 19:31:05

Golang函數重載

2021-12-07 08:16:34

React 前端 組件

2024-05-16 10:59:16

Vue項目前端

2009-03-24 13:04:55

匯總組織結構Oracle

2017-07-26 11:32:50

NETRabbitMQ系統集成

2015-11-26 10:53:45

LinuxWindowsMac OS

2021-01-19 10:35:49

JVM場景函數

2020-10-16 11:48:06

服務器系統運維

2021-01-19 05:46:00

算法javascript函數

2013-04-10 10:48:56

2013-04-10 10:40:41

2024-02-21 09:32:18

開發架構

2023-10-19 19:42:25

IstioPodkubernetes

2022-09-09 15:17:02

CentOS 7Linux

2023-10-10 13:23:18

空指針異常Java

2020-08-26 07:17:19

通信
點贊
收藏

51CTO技術棧公眾號

国产毛片久久久久久国产毛片| 日本精品在线视频| 成人啪啪18免费游戏链接| av资源在线| 欧美极品另类videosde| 超碰97在线资源| 波多野结衣电影在线播放| 亚洲五月综合| 亚洲欧美另类人妖| 亚洲一二三av| 久久电影tv| 亚洲影视在线播放| 日韩av不卡播放| 国产成人精品毛片| 美女精品在线观看| 欧美精品激情视频| 国产精品久久久免费看| 特黄特色欧美大片| 日韩三级电影网址| 中文字幕丰满乱码| 偷拍精品精品一区二区三区| 亚洲精品中文字幕在线观看| 日本在线播放一区| 亚洲日本香蕉视频| 国产成人精品一区二区三区网站观看| 国产精品久久久久久亚洲影视 | 精品在线观看入口| 日韩午夜在线观看视频| av污在线观看| 国产h片在线观看| 亚洲精品免费在线播放| 亚洲午夜久久久影院伊人| 日韩porn| 99久久婷婷国产综合精品 | 免费观看成人www动漫视频| 欧美一区二区三区白人| 三级a三级三级三级a十八发禁止| 中文字幕在线中文字幕在线中三区| 一个色妞综合视频在线观看| 久久久成人精品一区二区三区| 亚洲欧洲视频| 亚洲精品欧美综合四区| 日韩欧美视频第二区| 五月婷婷丁香网| 国产传媒一区在线| 91在线观看欧美日韩| 在线视频1卡二卡三卡| 日韩精彩视频在线观看| 日韩美女视频中文字幕| 4438国产精品一区二区| 亚洲一卡久久| 欧美一级大片在线免费观看| 在线免费观看毛片| 亚洲高清自拍| 久久久欧美一区二区| 久久精品黄色片| 欧美ab在线视频| 欧美激情精品在线| 亚洲黄色一区二区| 久久精品九九| 国产精品日韩欧美| 91在线视频国产| 国产精品影视天天线| 114国产精品久久免费观看| 国产成人久久精品77777综合| 国产成人综合亚洲网站| 国产精品区一区| 狠狠躁日日躁夜夜躁av| 91老师国产黑色丝袜在线| 人禽交欧美网站免费| 在线激情小视频| 亚洲免费视频中文字幕| 国产黄色片免费在线观看| 性欧美18~19sex高清播放| 欧美伊人久久久久久久久影院| 天天爽夜夜爽一区二区三区 | 日韩av色在线| 一本色道久久综合亚洲| 国产suv一区二区三区88区| 精品日本一区二区| 第三区美女视频在线| 亚洲欧美成人一区二区三区| 亚洲中文字幕无码av永久| 日韩影片中文字幕| 91精品国产黑色紧身裤美女| 国产人妻黑人一区二区三区| 欧美日韩水蜜桃| 欧美xxxx综合视频| 无码人妻丰满熟妇区五十路 | 亚洲精一区二区三区| 国产精品成人v| www.色亚洲| 国产色婷婷亚洲99精品小说| 麻豆传媒网站在线观看| 亚洲精品国产精品国产| 日韩视频中午一区| 3d动漫精品啪啪一区二区下载| 亚洲精品99| 日本欧美在线视频| 成人av一区二区三区在线观看| 久久久久久99久久久精品网站| 蜜臀av.com| 日韩一区二区三区在线免费观看| 欧美一区二区三区不卡| 一区二区三区在线观看免费视频| 激情综合亚洲| 国产欧美中文字幕| 青青青手机在线视频观看| 亚洲欧美欧美一区二区三区| wwwwww.色| 免费成人蒂法| 欧美日韩国产成人| 国产又粗又猛又黄又爽无遮挡| 26uuu亚洲| 国产夫妻自拍一区| 日本国产亚洲| 亚洲性夜色噜噜噜7777| 日韩av在线天堂| 国产精品99久久久久久久女警 | av女人的天堂| 亚洲人人精品| 成人高清在线观看| 国产写真视频在线观看| 欧美午夜免费电影| 精品人妻无码一区二区三区| 国产精品av久久久久久麻豆网| 国产精品亚洲欧美导航| 久久久资源网| 色又黄又爽网站www久久| 逼特逼视频在线观看| 亚洲精品久久| 成人网中文字幕| 在线观看麻豆| 欧美日韩亚洲综合在线 | 中文字幕免费在线播放| 欧美国产91| 91精品视频免费看| 免费黄色电影在线观看| 欧美日韩黄色一区二区| 性猛交ⅹxxx富婆video| 日韩福利视频网| 亚洲 日韩 国产第一区| 免费污视频在线一区| 亚洲人成电影在线播放| 国产一区二区视频免费| 国产欧美精品一区| 超碰在线播放91| 欧美国产一区二区三区激情无套| 国产精品主播视频| 国产日产一区二区三区| 欧美岛国在线观看| 精品人妻在线播放| www.成人在线| 国产精品333| 真实原创一区二区影院| 日本欧美中文字幕| 自拍视频在线网| 欧美乱熟臀69xxxxxx| 久久中文免费视频| 国产成人日日夜夜| 久久综合色视频| 久久99国产精品视频| 国产精品黄页免费高清在线观看| 三区四区电影在线观看| 91精品国产综合久久福利| 欧美日韩精品在线观看视频 | 91精品国产入口| www.av视频在线观看| 91亚洲男人天堂| 中文字幕第80页| 香港欧美日韩三级黄色一级电影网站| 亚洲自拍欧美另类| 老牛影视精品| 最近免费中文字幕视频2019| a级片在线免费看| 精品福利在线视频| 91成人精品一区二区| 狠狠色丁香久久婷婷综| 国产96在线 | 亚洲| 欧美日韩在线观看视频小说| 91久久精品在线| 超碰99在线| 日韩一区二区福利| 日本高清视频www| 欧美视频一区在线观看| 久久国产一级片| 国产欧美视频一区二区三区| 亚洲精品一二三四| 亚洲男人影院| 成人国产在线看| 国产伦一区二区三区| 999在线观看免费大全电视剧| 欧美性精品220| 400部精品国偷自产在线观看| 狼人精品一区二区三区在线| 国产精品亚洲欧美导航| 草草视频在线观看| 久久亚洲国产精品| 青青草手机在线| 欧美一级日韩不卡播放免费| 日本久久综合网| 一区二区三区精品在线观看| 性猛交娇小69hd| 不卡在线视频中文字幕| 伊人色在线观看| 国产欧美日韩亚洲一区二区三区| 国产精品h视频| 精品国产91久久久久久浪潮蜜月| 国产精品成人一区二区三区| 国产精品天堂蜜av在线播放| 欧美在线免费观看| 国产嫩草在线视频| 久久视频在线播放| 国产片在线观看| 日韩第一页在线| 欧美一级在线免费观看| 制服丝袜亚洲色图| 性高潮视频在线观看| 精品久久久视频| 国产乡下妇女做爰毛片| 亚洲人123区| 老司机福利在线观看| 久久精品视频免费| 波多野结衣影院| 成人亚洲一区二区一| 巨乳女教师的诱惑| 久久se精品一区精品二区| 日本熟妇人妻中出| 亚洲欧美日韩国产综合精品二区| 成人免费a级片| 中文字幕一区二区三区在线视频| 日韩jizzz| 精品少妇av| 日韩激情视频| 欧美日韩激情| 亚洲欧洲精品一区二区三区波多野1战4| 麻豆成人入口| 精品在线观看一区二区| 免费看成人人体视频| 黄色小网站91| 免费成人三级| 麻豆精品传媒视频| 妖精视频一区二区三区| 久久另类ts人妖一区二区| 日韩动漫一区| 欧美一卡2卡3卡4卡无卡免费观看水多多 | www.51色.com| 久久爱www久久做| 亚洲热在线视频| 国产成人在线免费| 欧美激情一区二区三区p站| 懂色av中文一区二区三区| 日本黄色大片在线观看| 不卡欧美aaaaa| 亚洲第一香蕉网| 国产三级欧美三级日产三级99| av女人的天堂| 国产精品乱人伦| 国产福利视频网站| 亚洲影视在线观看| 91精品国产综合久久久蜜臀九色| 色久优优欧美色久优优| 中文在线最新版天堂| 在线电影欧美成精品| 成人免费视频国产| 亚洲欧美日韩一区在线| www 日韩| 欧美激情免费看| 欧美福利在线播放| 92看片淫黄大片欧美看国产片| 911精品国产| 欧美精品欧美精品系列c| 久久在线视频| 日本免费a视频| 久热国产精品| 中文字幕一区久久| 成人白浆超碰人人人人| 男生草女生视频| 一区二区三区自拍| 69视频免费在线观看| 欧美男人的天堂一二区| 人妻无码中文字幕| 伊人男人综合视频网| 一色桃子av在线| 日本欧美一二三区| 一区二区视频| 日韩精品久久一区二区三区| 亚洲蜜桃视频| 国产精品视频一区二区三区四区五区| 男女男精品视频| 日本少妇xxxx| 国产精品久久影院| 黄色片视频网站| 777色狠狠一区二区三区| 天天干天天做天天操| 久久久999国产| 黑人巨大精品| 国产精品国产一区二区| 久久国产中文字幕| 日韩av黄色网址| 国产精品一区二区三区网站| 国产精品久久久久无码av色戒| 亚洲欧洲综合另类在线| 999视频在线| 亚洲精品成a人在线观看| 国产精品扒开做爽爽爽的视频| 欧美在线影院在线视频| 亚洲精品a区| 亚洲欧洲日韩精品| 亚洲欧美日韩国产综合精品二区| 一级黄色免费毛片| 国产精品国产三级国产普通话99| 91国产丝袜播放在线| 亚洲成人福利片| 午夜久久久久久噜噜噜噜| 伊人久久精品视频| sis001欧美| 精品国产一区二区三区日日嗨| 性xxxx欧美老肥妇牲乱| 国产又大又黄又粗又爽| 91丨porny丨国产| 国产精品二区一区二区aⅴ| 欧美一区二区三区的| 毛片在线播放a| 国产精品入口免费视| 精品一区亚洲| 北条麻妃69av| 91丨porny丨国产| 日韩免费在线视频观看| 精品福利视频一区二区三区| 大片免费在线观看| 成人福利在线观看| 99tv成人| www.色欧美| 成人欧美一区二区三区黑人麻豆| wwwwww在线观看| 一区二区三区亚洲| 黄色精品视频| 亚洲不卡一卡2卡三卡4卡5卡精品| 日韩午夜电影| 久久久久久久无码| 精品久久久久久中文字幕一区奶水| 欧美性受xxxx狂喷水| 韩日欧美一区二区| 精品精品国产毛片在线看| 成人免费视频91| 99riav一区二区三区| 欧美一二三区视频| 亚洲美女www午夜| 欧美色网一区| 亚洲精品8mav| 国产一区二区三区四区在线观看| 日韩欧美123区| 精品国精品自拍自在线| 2018av在线| 精品国产免费一区二区三区| 国产精品婷婷| 少妇愉情理伦三级| 91精品国产欧美一区二区成人| 91蜜桃在线视频| 极品日韩久久| 秋霞午夜av一区二区三区| 99久久久免费精品| 日韩精品一区二区三区四区| 黄色激情在线播放| 日本电影一区二区三区| 毛片av一区二区| 国产亚洲成人精品| 亚洲精品视频网上网址在线观看| 亚洲淫成人影院| 亚洲国产欧美不卡在线观看 | 一本一道久久综合狠狠老精东影业| 人妻丰满熟妇aⅴ无码| 精品视频在线免费| 男女视频在线| 日韩精品国内| 国产精品69毛片高清亚洲| 可以免费看的av毛片| 中文字幕不卡在线视频极品| 日本一区二区三区播放| 无码人妻丰满熟妇区96| 亚洲视频资源在线| 三区在线视频| 91视频九色网站| 国产日韩一区| 91在线播放观看| 亚洲欧美日韩爽爽影院| 色妞ww精品视频7777| 妺妺窝人体色www在线观看| 洋洋成人永久网站入口| 韩国精品视频| 国产精品麻豆免费版| 免费成人美女在线观看.| 国产成年人免费视频| 日韩一级黄色av| 亚洲精品国产动漫| www日本在线观看| 欧美男男青年gay1069videost| 国产极品在线观看| 久久久久久久久久久久久国产|