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

文章目录

      • 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.xdnf.cn/news/1560375.html

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

相关文章

微软最新 Office 办公软件2025下载 – Microsoft 365 正版优惠订阅

​ 以前 Office 365 是微软打造的「办公软件订阅」服务。订阅后,用户可以在多个平台使用Word、Excel、PowerPoint、OneDrive云存储网盘等正版办公应用。 微软希望这种订阅方式能够推广到更多的产品和用户,于是决定将 Office 365 升级为全新的「Microsoft…

linux线程 | 线程的概念

前言:本篇讲述linux里面线程的相关概念。 线程在我们的教材中的定义通常是这样的——线程是进程的一个执行分支。 线程的执行粒度, 要比进程要细。 我们在读完这句话后其实并不能很好的理解什么是线程。 所以, 本节内容博主将会带友友们理解什么是线程&a…

连肝了多天学习MySQL索引与性能优化,详细总结一下索引的使用与数据库优化

文章目录 索引是什么?索引的作用初步认识索引索引的类型按照数据结构分类BTREE索引 哈希索引 按功能逻辑进行分类唯一索引普通索引主键索引全文索引 按照字段的个数进行划分单列索引多列(组合,联合)索引 小结索引的设计原则数据准…

K8s中pod的管理和优化

一、k8s中的资源 1.1 资源管理介绍 在kubernetes中,所有的内容都抽象 资源,用户需要通过操作资源来管理kubernetes。kubernetes的本质上就是一个集群系统,用户可以在集群中部署各种服务所谓的部署服务,其实就是在kubernetes集群中…

基于SpringBoot+Vue的非物质文化遗产保护与传播系统设计实现【原创】(地图组件)

🎈系统亮点:地图组件; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框架Vue.js&#x…

软件项目必须进行验收测试吗?专业验收测试报告如何获取?

软件项目验收测试是一种关键的质量保证活动,旨在确保软件产品符合用户需求和预期功能。它通常是在软件开发完成后,由客户或第三方测试机构进行的最终测试环节。验收测试的目的是确认软件的性能、功能、安全性和其他特性,以确保交付的产品能够…

不是 PHP 不行了,而是 MySQL 数据库扛不住啊

大多数的业务场景下 PHP 还没有达到性能瓶颈,然而 MySQL 数据库就先行驾崩了。但我们总是不分青红皂白,一股脑的把原因归结于是 PHP 语言不行了,每当遇到这种情形我就会感叹到 PHP 的命真苦啊。PHP 作为一门优秀的开源编程语言,在…

CAS存在的问题及在Java中的解决方式

CAS 介绍 CAS 可以保证对共享变量操作的原子性 CAS全称Compare And Swap,比较与交换,是乐观锁的主要实现方式。CAS在不使用锁的情况下实现多线程之间的变量同步。ReentrantLock内部的AQS和原子类内部都使用了CAS。 CAS算法涉及到三个操作数:需…

深度学习500问——Chapter17:模型压缩及移动端部署(4)

文章目录 17.9 常用的轻量级网络有哪些 17.9.1 SequeezeNet 17.9.2 MobileNet 17.9.3 MobileNet-v2 17.9.4 Xception 17.9 常用的轻量级网络有哪些 17.9.1 SequeezeNet SqueezeNet出自 F.N.landola, S.Han等人发表的论文《SqueezeNet:ALexNet-level accuracy with…

python文件,异常,模块,正则思维导图

python文件操作 python异常处理 python模块和包 python正则表达式

强大的PDF到Word转换工具

Solid Converter:强大的PDF到Word转换工具推荐 在日常工作和学习中,PDF是最常用的文件格式之一。然而,编辑PDF文档并不总是那么方便,尤其是当你需要将PDF文件转换为Word文档时。Solid Converter 是一款强大的工具,专为…

高效美发店运营:SpringBoot管理系统详解

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理美发门店管理系统的相关信息成为必然。开发…

鸿蒙开发(NEXT/API 12)【HTTP数据请求】网络篇

场景介绍 应用通过HTTP发起一个数据请求,支持常见的GET、POST、OPTIONS、HEAD、PUT、DELETE、TRACE、CONNECT方法。 接口说明 HTTP数据请求功能主要由http模块提供。 使用该功能需要申请ohos.permission.INTERNET权限。 接口名描述createHttp()创建一个http请求…

解决SqlServer自增主键使用MybatisPlus批量插入报错问题

报错 SqlServer 表中主键设置为自增,会报以下错误。 org.springframework.jdbc.UncategorizedSQLException: Error getting generated key or setting result to parameter object. Cause: com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获…

LangChain: AI大语言模型的新篇章

本文介绍了LangChain框架,它能够将大型语言模型与其他计算或知识来源相结合,从而实现功能更加强大的应用。接着,对LangChain的关键概念进行了详细说明,并基于该框架进行了一些案例尝试,旨在帮助读者更轻松地理解LangCh…

springboot查询全部部门流程

前端发送请求后,会请求DeptController的方法list()。 package com.intelligent_learning_aid_system.controller;import com.intelligent_learning_aid_system.pojo.Dept; import com.intelligent_learning_aid_system.pojo.Result; import com.intelligent_learni…

SpringBoot美发门店管理系统:提升服务效率

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

360 度评估的优缺点

什么是 360 度评估? “360 度评估是一种人才培养工具,用于为接受者提供全方位的反馈,这通常包括来自他们直接下属的向上反馈、来自与他们密切合作的同事的反馈,以及来自他们经理的向下反馈。” 通常,360 度评估是匿名…

渗透测试之 域AD渗透手法【密码喷洒技术】手法详解 以及相关示例

说明: 域内密码喷洒工具: Kerbrute DomainPasswordSpray.ps1 原理抓个包分析一下: 域内用户枚举攻击防御: 流量检测: 说明: 域内密码喷洒(Password Spraying)一般和域内用户名枚举一起使用。 域内密码喷洒工具:…

SQL 干货 | 使用 EXISTS 编写 SELECT 查询

基于 SQL 中的 EXISTS 运算符为我们提供了一种基于其他数据是否存在(或不存在)来检索数据的简便方法。更具体地说,它是一个逻辑运算符,用于评估子查询的结果,并返回一个布尔值,该值指示是否返回了行。尽管 …