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

server/2024/10/11 5:26:40/

文章目录

      • 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.ppmy.cn/server/129980.html

相关文章

民锋金融:稳健发展的战略与未来展望

民锋金融作为行业内的重要参与者,在金融市场中不断创新与发展。面对全球化的市场环境,民锋金融始终秉持稳健发展的战略方针,结合现代金融科技与传统业务,为客户提供多样化的金融服务。无论是在风险控制、产品研发,还是…

springboot 前后端处理日志

为了实现一个高效且合理的日志记录方案,我们需要在系统架构层面进行细致规划。在某些情况下,一个前端页面可能会调用多个辅助接口来完成整个业务流程,而并非所有这些接口的交互都需要被记录到日志中。为了避免不必要的日志开销,并…

【Docker】Docker基本操作

目录 一、了解云计算背景 1.1 云计算的三种服务模式 1.2 虚拟机的两种架构 二、Docker 概述 2.1 Docker简述 2.2 Docker 特点 2.3 Docker与虚拟机的区别 2.4 容器技术有哪些 2.4.1 namespace的六项隔离 2.5 Docker核心概念 2.5.1 镜像 2.5.2 容器 2.5.3 仓库 三、…

CSRF | CSRF 漏洞介绍

关注这个漏洞的其他相关笔记:CSRF 漏洞 - 学习手册-CSDN博客 0x01:CSRF 漏洞简介 CSRF(Cross-Site request forgery,跨站请求伪造)也被称为 One Click Attack 或者 Session Riding,通常缩写为 CSRF 或者 X…

【STM32】STM32CubeMX 之 GPIO配置 【笔记】

环境 硬件:通用PC 系统: Windows 10 软件 :STM32CubeMX 在STM32CubeMX的GPIO配置中,每个选项都有特定的含义。以下是逐一解释这些选项: 1.GPIO output level (仅适用于输出模式): Low: 初始输出状态为低电平High: …

开源全文搜索(搜索引擎)

吃水不忘挖井人,介绍Doug Cutting大牛是十分有必要的。 最早,接触到搜索引擎,知道有个Nutch(开源搜索引擎),于是开始查看Nutch相关的资料,发现了Nutch的创始人Doug Cutting,随着项目…

数组与链表的特点、细节及其原理研究

目录 第一章 数组的基本概念与原理 1.1 数组的定义与特性 1.1.1 数组的连续性 1.1.2 数组的固定大小性 1.2 数组的存储方式 1.3 数组的访问与操作 第二章 链表的基本概念与原理 2.1 链表的定义与特性 2.2 链表的种类 2.2.1 单向链表 2.2.2 双向链表 2.2.3 循环链表…

Java面试题——第十篇

1. 什么是Java的PLAB PLAB是Java垃圾回收器中的一种优化机制,主要用于G1垃圾收集器,目的是提高对象晋升到老年代的效率。 在垃圾回收过程中,新生代中的某些对象由于生命周期较长,会被晋升到老年代。为了减少线程竞争和提升晋升效…