搭建 golang 项目的目录介绍及其用途对比表

news2024/10/10 10:19:07

文章目录

      • 1.目录细则表
      • 2.目录使用说明及典型内容
      • 2.例 K8S 源码目录编排


1.目录细则表

常见 Go 项目目录的作用、典型内容、文件类型和使用场景~

目录名作用/用途常见文件类型使用场景及详细说明典型内容举例
cmd/存放可执行文件的入口点,通常为项目主程序入口或工具的 main.go 文件。main.go, 配置文件(如 .yaml每个子目录下对应一个独立的可执行程序。适合构建多个 CLI 工具或服务器。cmd/app/main.go:应用主入口,调用业务逻辑、启动服务等。
pkg/公共库代码,复用性强,可以被项目内外导入。.go 文件,库代码用于编写高复用度的库,供其他模块或项目使用。这个目录代表项目对外暴露的 API。pkg/utils/:常用工具函数库,如字符串处理、时间格式化等。
internal/项目内部使用的私有库代码,外部项目无法导入,保持封装性和安全性。.go 文件,私有库代码用于实现内部逻辑,防止外部依赖,确保模块内部实现的可维护性。internal/auth/:用户认证相关的内部逻辑,不暴露给外部模块。
api/定义与实现 API 相关的接口文件,如 gRPC、RESTful 接口、Swagger 定义等。.proto, .json, .yaml用于存放接口定义文件、协议文件或自动生成的代码,特别是面向服务或微服务架构。api/v1/service.proto:gRPC 服务定义,包含消息结构和服务方法。
configs/配置文件目录,项目启动时加载的静态配置,如数据库连接、日志配置等。.yaml, .json, .toml, .env存放不同环境的配置文件,供开发、测试和生产环境使用。configs/app.yaml:应用程序的配置文件,包含端口、环境变量等。
scripts/自动化脚本目录,通常用于构建、测试、部署等任务。.sh, .bat, .ps1, .py自动化操作脚本,简化常见任务如构建、CI/CD 流程等。scripts/deploy.sh:部署脚本,用于在服务器上自动化部署项目。
test/集成测试或端到端测试的目录,测试多个组件的集成效果。_test.go, 配置文件对外部依赖或多模块的功能进行整体测试。通常用于验证项目的整体功能是否正确。test/integration_test.go:集成测试,验证多个服务或模块间的交互。
vendor/存放项目的本地依赖库,主要在不使用 Go Modules 时用于本地化第三方依赖。第三方库代码当无法依赖外部的包管理系统时,将第三方库存放于此,确保项目的依赖可控性。vendor/github.com/some-library/:本地化的外部依赖库代码。
docs/项目文档目录,存放用户指南、开发文档、设计文档、架构图等。.md, .pdf, .html帮助开发者或用户理解项目的结构和使用方法,通常包括项目的使用手册和设计文档。docs/architecture.md:项目的架构设计文档,解释模块如何协同工作。
build/存放构建相关的文件和输出结果,如二进制文件、Dockerfile 等。构建脚本,配置文件,二进制文件项目构建输出目录,用于存放编译好的文件,或用于 CI/CD 的配置文件。build/Dockerfile:Docker 镜像的构建文件,用于创建容器化的应用程序。
assets/存放静态资源文件,如图片、CSS、JavaScript、HTML 模板等。.html, .css, .js, 图片文件用于 Web 项目,存放静态文件或资源,前后端分离项目的前端资源通常放在此目录。assets/index.html:前端 HTML 模板,供后端渲染和返回给浏览器使用。
bin/存放编译后的二进制可执行文件。编译好的二进制文件项目编译后的输出,供开发者直接执行,通常会包含生成的命令行工具或服务器程序。bin/app:项目编译后的可执行文件,包含了整个应用的逻辑。
examples/提供项目的示例代码,演示如何使用库或接口,帮助用户快速上手。示例代码,文档向用户展示如何使用项目的 API 或库,通常是简化版的代码片段或完整示例。examples/demo.go:项目使用示例,展示如何使用库进行开发。
third_party/存放第三方工具或依赖库的自定义版本,便于项目集成。第三方库或工具项目自定义版本的外部依赖或工具,通常是未通过标准包管理工具获得的第三方代码。third_party/custom-library/:自定义版本的第三方库或工具。
web/存放 Web 项目相关的前端文件,如 HTML 模板、静态资源等。.html, .css, .js, 图片文件Web 应用的前端资源目录,供后端渲染或静态文件服务器使用。web/index.html:Web 项目的首页文件,供浏览器直接访问。
tmp/临时文件目录,存放运行时或临时生成的文件。临时文件在项目运行过程中产生的临时文件,不需要永久保存,可以被定期清理。tmp/cache/:运行时生成的缓存文件,通常会在程序结束时删除。
log/存放项目运行时生成的日志文件。.log 文件用于记录项目运行过程中的日志信息,帮助开发者调试和监控系统状态。log/app.log:项目的运行日志文件,记录请求和错误等信息。

2.目录使用说明及典型内容

  1. cmd/:适合存放项目的可执行文件的入口点,尤其是当一个项目有多个 CLI 工具或服务器时,可以为每个工具创建独立的子目录。
  2. pkg/:这个目录常用来放置公共库代码,设计成可以被其他项目或库导入复用,尽量避免直接将业务逻辑暴露在 pkg/ 中。
  3. internal/:存放项目的内部实现,外部项目无法导入它。适合存放核心业务逻辑和实现细节,保证这些逻辑的封装性和独立性。
  4. api/:用于存放 API 的定义文件,如 gRPC 的 .proto 文件或 REST API 的 Swagger 定义文件。适合大型微服务架构或接口设计。
  5. configs/:可以存放各类环境的配置文件,例如开发、测试、生产等,并且通过环境变量动态切换配置。
  6. scripts/:自动化运维脚本,通常用于构建、部署、运行项目时的自动化任务。
  7. test/:区别于单元测试,这里用于存放集成测试、端到端测试或性能测试,确保项目的多个组件在真实环境中可以正常运行。
  8. vendor/:尽管 Go modules 已经广泛使用,但当需要强制将依赖库内置时,可以使用 vendor/
  9. docs/:存放开发者文档、API 文档等,帮助新加入的开发者或用户更好地理解项目。
  10. build/:存放构建相关的文件,特别是 CI/CD 配置文件或构建输出,通常与项目的构建过程相关联。
  11. assets/:Web 项目必备的目录,用于存放静态资源如 HTML、CSS、JS 等前端文件。
  12. bin/:存放项目编译后的二进制文件,供直接部署或分发使用。
  13. examples/:向用户展示项目的使用方法,提供代码示例帮助用户快速上手。
  14. third_party/:集成第三方库或工具时,如果需要做定制修改或扩展,可以将它们放在此目录下。
  15. web/:存放 Web 项目的静态文件,适合前后端分离的项目。
  16. tmp/:临时文件目录,存放短期生成的中间文件或缓存,通常会在任务结束时清理。
  17. log/:存放日志文件,帮助监控项目运行状态和排查错误。

2.例 K8S 源码目录编排

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2201722.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP_FI模块-公司间资产转移ABT1N操作

业务背景: 1、用户在OA走公司间资产的转移流程时,提示错误以下错误; 通过与OA开发的同事沟通发现,调用的接口是自开发的这个:ZFIF_AA_TRANSFER_POST,使用的是BDC录屏的方式,真正执行的事务码是A…

重学SpringBoot3-集成Redis(一)之基础功能

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(一)之基础功能 1. 项目初始化2. 配置 Redis3. 配置 Redis 序列化4. 操作 Redis 工具类5. 编写 REST 控制器6. 测试 AP…

DAMA数据管理知识体系(第12章 元数据管理)

课本内容 12.1 引言 图12-1 语境关系图:元数据概念理解 元数据的信息范围很广,不仅包括技术和业务流程、数据规则和约束,还包括逻辑数据结构与物理数据结构等。它描述了数据本身(如数据库、数据元素、数据模型)&#x…

MokeJs使用实例

文章目录 MokeJs使用实例介绍使用安装配置文件导入配置到main.js使用 axios 发送网络请求测试(如果不会axios,具体可以见上篇文章axios)启动示例 MokeJs使用实例 介绍 使用 安装 npm install mockjs --save-dev # 或者 yarn add mockj…

python画图|两个Y轴共享X轴

【1】引言 在前述学习中,对使用matplotlib模块输出图形已经非常熟练,但常见的画图方式并未穷尽,如两个Y轴共享X轴就没有探索过。 对此,我进行了一些学习,获得一些心得,在此和大家共享。 【2】官网教程 …

点评项目-4-隐藏敏感信息、使用 redis 优化登录业务

一、隐藏敏感信息 之前我们对 /user/me 路径,直接返回了登录的所有用户信息,其中的 passward 等敏感信息也会被返回到前端,这是很危险的,故我们需要选择性的返回用户信息,隐藏敏感用户信息 我们可以创建一个 UserDTO…

ECCV`24 | 新加坡国立华为提出Vista3D: 实现快速且多视角一致的3D生成

文章链接:https://arxiv.org/pdf/2409.12193 gitbub链接:https://github.com/florinshen/Vista3D 亮点直击 提出了Vista3D,一个用于揭示单张图像3D darkside 的框架,能够高效地利用2D先验生成多样的3D物体。开发了一种从高斯投影到…

43 C 程序动态内存分配:内存区域划分、void 指针、内存分配相关函数(malloc、calloc、realloc、_msize、free)、内存泄漏

目录 1 C 程序内存区域划分 1.1 代码区 (Code Section) 1.2 全局/静态区 (Global/Static Section) 1.3 栈区 (Stack Section) 1.4 堆区 (Heap Section) 1.5 动态内存分配 2 void 指针(无类型指针) 2.1 void 指针介绍 2.2 void 指针的作用 2.3 …

Web自动化Demo-Go+Selenium

1.新建工程 使用GoLand新建工程如下: 打开终端输入如下命令安装Selenium go get -u github.com/tebeka/selenium 2.编写代码 package mainimport ("fmt""github.com/tebeka/selenium""log""time" )const (chromeDriver…

视频生成的黎明:100+页干货全面探讨SORA类模型(T2VI2VV2V全包括)腾讯中科大

日前,腾讯AI Lab和中科大联合发布了100多页的类SORA模型研究报告,非常全面,很有学习和研究价值,今天和大家分享下,内容较多,可后台回复【类SORA报告】获取100多页pdf。 开源地址:https://ailab-…

函数信号发生器的直流偏置(OFFSET)旋钮的作用及操作方法

函数信号发生器(Function Generator)是电子工程师和技术人员在电路设计、测试和调试中常用的设备之一。它可以生成各种标准波形,如正弦波、方波、三角波等,以及用户自定义的任意波形。在众多参数设置中,直流偏置&#…

2025考研今天开始预报名!攻略请查收

2025年全国硕士研究生招生考试 今天起开始预报名 有什么流程?需要准备哪些信息? 这份考研报名攻略速查收 ↓↓↓ 全国硕士研究生招生考试报名包括网上报名和网上确认两个阶段: 网上预报名时间为10月9日至10月12日(每日9&#xff1…

电脑屏保设置教程 好看的电脑屏保应该怎么设置?

一、电脑自带的屏保设置,主题少,操作复杂; 你需要选择一个合适的屏保。在Windows系统中,你可以通过以下步骤找到合适的屏保: 右键点击桌面空白处,选择“个性化”; 在“个性化”设置中&#x…

win10家庭版配置ubantu20.04子系统

需要在本地配置一个环境去跑代码,代码的环境如下: 刚开始准备给电脑装一个双系统的,室友踩过坑告诉我安装wsl子系统就可以了,方便快捷~ 于是开始了摸索之旅!记录如下 (我刚开始以为一定要win10专业版&…

人才画像的重要性,如何打造精准人才画像?

人才画像在人力资源管理中占据重要地位,尤其是在人才招聘环节,它发挥着不可替代的作用,制定精准的人才画像有助于优化招聘和人力资源管理,从而提高组织竞争力和发展潜力。 一、人才画像的重要性 提高招聘精准度:精准…

考试系统之题目反馈

在现代教育体系中,考试不仅是检验学生学习成果的重要手段,也是教师评估教学效果、调整教学策略的关键环节。随着科技的飞速发展,传统的纸质考试逐渐被在线考试系统所取代,而题目反馈功能作为在线考试系统不可或缺的一部分&#xf…

电磁兼容(EMC):整改案例(五)EFT测试,改初级Y电容

目录 1. 异常现象 2. 原因分析 3. 整改方案 4. 总结 1. 异常现象 某产品按GB/T 17626.4标准进行电快速瞬变脉冲群测试,测试条件为:频率5kHz/100kHz,测试电压L,N线间2kV。其中频率5kHz时,测试通过,但频…

开源 AI 智能名片 O2O 商城小程序源码助力企业实现三层式个性化体验

摘要:本文探讨了在数字化时代,企业如何利用开源 AI 智能名片 O2O 商城小程序源码实现三层式个性化体验。通过分析数字化空间的定制化和个性化服务特点,以及实体经营中对人际互动的依赖,阐述了随着物联网和人工智能基础设施的开发&…

[Python] 使用Python自定义生成二维码

文章目录 目录 安装 qrcode 库生成简单的二维码代码讲解 生成自定义样式的二维码代码讲解 生成带有链接的二维码代码讲解 Demo代码实现代码讲解 总结 收录专栏: [Python] 二维码是现在非常常用的一种信息存储和传递方式,我们可以通过扫描二维码来快速获取文本、链接…

史上最全JLInk调试Kevil指南||一篇就够了||从菜鸟到调试大佬

目录 写在前面 问题1:jlink的port选项有SW和JTAG,这两个有什么区别,为什么大多数情况下选SW? 1.配置reset and run,下載即可重启 2.寄存器 问题2:keil中debug调试中会出现register和value,register中包括R0&#…