【go 笔记】go 项目目录的结构

2023-10-28

  • 原文来自:https://github.com/suhanyujie/hello_go/blob/master/notes/2021/go_pro_dir_struct.md
  • 文章标题:【go 笔记】go 项目目录的结构
  • 作者:suhanyujie
  • 标签:go,项目目录,go 初学
  • tip:如果异常,还请指正~

go 项目目录的结构

使用 go 开发也快一年了,对 go 的了解还是有很大的提高空间。在这近一年来,很多时候,知道 go 很灵活,无论是从语法使用上,还是从项目结构组织上,都具备很大的灵活性。
但过大的灵活性也带来了百家齐放、无固定标准,进而导致一些初学者很疑惑。

go 官方自从 1.11、1.12 版本的 go 开始引入了 go module,让 go 语言的项目结构变得越来越好用。以前,我们的项目要放入 GOPATH
中,而如今,开启了 go module 后,随处 mod init 就能产生一个新项目,使用 go get 命令引入三方包。而当你下载别人的项目时,只需要用 go list -m all 就能轻松地下载所有依赖,从而运行项目。
不得不承认,go 的确很方便、很实用!

但做技术的,遇到不好用的地方,总喜欢吹毛求疵,期望有更好的解决方案。比如:go 的项目如何组织。我们知道 go 的很多仓库都有很长的文件、目录列表,比如下面这个仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NJo0yI9n-1630289494048)(https://github.com/suhanyujie/hello_go/raw/master/notes/2021/images/go-pro1-dir1_20210829223618.jpg)]

再比如另一个项目

也许和 go 本身的历史发展有关,但这些目录看起来确实很冗长,不够简洁。

随着 go 社区的发展,社区的开发者们整理出一套符合 go 特性的项目目录结构,并且将其组织成文档放到 GitHub 上
其中详细介绍了 go 项目的结构,并且各个目录的作用和设计原因。

-youProject
 - cmd                          // 项目主要的应用程序。
   - api                        // 服务端应用程序的目录
   - web                        // Web应用程序的目录
 - internal                     // 私有的应用程序代码库。
 - pkg                          // 外部应用程序可以使用的库代码(如,/pkg/mypubliclib)。
 - vendor                       // 应用程序的依赖关系(通过手动或者使用喜欢的依赖管理工具,如新增的内置Go Modules特性)。
 - configs                      // 配置文件模板或默认配置。
 - init                         // 系统初始化(systemd、upstart、sysv)和进程管理(runit、supervisord)配置。
 - scripts                      // 用于执行各种构建,安装,分析等操作的脚本。
 - build                        // 打包和持续集成。将云(AMI),容器(Docker),操作系统(deb,rpm,pkg)软件包配置和脚本放在/build/package目录中。
 - deployments                  // IaaS,PaaS,系统和容器编排部署配置和模板(docker-compose,kubernetes/helm,mesos,terraform,bosh)。
 - test                         // 外部测试应用程序和测试数据。
 - test                         // 外部测试应用程序和测试数据。
 - docs                         // 设计和用户文档(除了godoc生成的文档)。
 ...

这里列举了一些常用的目录,可以根据自己的需要进行删减。更加详细的文档说明可以去仓库里查看。

参考

  • https://go.dev/blog/using-go-modules
  • 该如何组织 Go 项目结构? https://zhuanlan.zhihu.com/p/346573562
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【go 笔记】go 项目目录的结构 的相关文章

  • jmeter安装和压力测试

    一 安装 1 1 下载安装包 1 2 解压到指定目录 1 3 配置环境变量 JMETER HOME D java apache jmeter 5 1 1 CLASSPATH JMETER HOME lib ext ApacheJMeter

随机推荐

  • React利用路由实现登录界面的跳转

    React利用路由实现登录界面的跳转 上一篇在配置好了webpack和react的环境后 接下来开始写登录界面 以及接下来的跳转到主页的功能 1 首先看一下总体的目录结构 因为很多时候在看别人写的例子的时候因为目录结构不熟悉后边会出现意想不
  • Android RecyclerView BaseSectionQuickAdapter实现分组功能

    详情网站 手把手教你使用BaseSectionQuickAdapter实现分组功能 史上最详细Adapter使用教程 basequickadapter 分组 杨阿程的博客 CSDN博客 加入二个包 implementation com an
  • Python 文件读取操作

    视频版教程 Python3零基础7天入门实战视频教程 文件IO操作 Python的内置库提供了对文件的IO操作 可以对文件进行打开 读 写 关闭等操作 文件读取操作 你必须先用Python内置的open 函数打开一个文件 创建一个file对
  • 软件工程 数据流图(DFD)变换型与事务型的分析

    在系统分析阶段 我们采用结构化分析方法得到了由数据流图 数据字典和加工说明等组成的系统的逻辑模型 现在 可根据一些规则从数据流图导出系统初始的模块结构图 管理信息系统的数据流图通常也可分为两种典型的结构 即变换型结构和事务型结构 变换型结构
  • 10-Java框架-SpringBoot整合MyBatis-Plus

    一 MyBatis Plus介绍 官网 https baomidou com MyBatis Plus 简称 MP 是一个 MyBatis的增强工具 在 MyBatis 的基础上只做增强不做改变 无侵入式 为简化开发 提高效率而生 MyBa
  • H5 打开微信小程序 公众号

    1 打开公众号的方式 https mp weixin qq com mp profile ext action home biz 公众号BASE64ID scene 110 wechat redirect base64ID 寻找方式 转发任
  • 基于 SpringBoot+Vue+Java 的高校招生管理系统(数据库+源码和教程)

    文章目录 简介 系统设计思路 1 数据库设计 2 系统整体设计 2 1 系统设计思想 2 2系统流程图 系统详细设计 1系统功能模块 2 管理员功能模块 3学生功能模块 简介 本次设计任务是要设计一个高校招生管理系统 通过这个系统能够满足管
  • [python应用案例] 一.BeautifulSoup爬取天气信息并发送至QQ邮箱

    前面作者写了很多Python系列文章 包括 Python基础知识系列 Python基础知识学习与提升 Python网络爬虫系列 Python爬虫之Selenium Phantomjs CasperJS Python数据分析系列 知识图谱 w
  • 【sqli-labs】 less29 GET- Error based -Impidence mismatch -Having a WAF in front of web application (G...

    这关有点意思 有一点需要事先注意 这关玩的是login php而不是默认的index php 再注入之前需要先了解一下HPP HTTP Parameter Pollution 详情参照这篇 http blog csdn net eatmil
  • caffe:利用python分类,并可视化模型参数、数据

    caffe官方文档 http nbviewer jupyter org github BVLC caffe blob master examples 00 classification ipynb 1准备工作 1 1 安装python nu
  • 通过ffmpeg进行录屏直播

    1 在Windows上安装FFmpeg程序 转载 参考地址 https www cnblogs com daxiong2014 p 4399046 html 2 通过ffmpeg进行录屏直播 参考地址 https blog csdn net
  • shopify cli 的命令

    shopify theme 多语言国际化开发 shopify theme 跨境电商开发 liquid 本地编辑shopify主题的方式一 shopify cli 的命令 使用shopify help
  • [转]聚簇索引与非聚簇索引(也叫二级索引)

    通俗点讲 聚簇索引 将数据存储与索引放到了一块 找到索引也就找到了数据 非聚簇索引 将数据存储于索引分开结构 索引结构的叶子节点指向了数据的对应行 myisam通过key buffer把索引先缓存到内存中 当需要访问数据时 通过索引访问数据
  • 【数据结构】超详细——动态栈

    1 栈的概念和结构 栈 一种特殊的线性表 其只允许在固定的一端进行插入和删除元素操作 进行数据插入和删除操作的一端称为栈顶 另一端称为栈底 栈中的数据元素遵守后进先出 Last In First Out 的原则 压栈 栈的插入操作叫做进栈
  • Eclipse Maven 错误: 找不到或无法加载主类 ?

    在Eclipse中开发一个java web的项目 让程序在Maven Build下运行时出现了如下问题 然后去百度了很多解决方案 如下 然而问题还是没有解决 然后我建了一个HelloWorld用来测试 在Eclipse下运行也报同样的错误
  • 高防CDN的防御特点是什么?

    高防CDN Content Delivery Network 是一种集成了防御DDoS攻击和保护网络安全的内容分发网络解决方案 以下是高防CDN的主要防御特点 DDoS攻击防护 高防CDN具备强大的DDoS攻击防护能力 可以有效地抵御各种类
  • Python代码写好了怎么运行?

    Python代码写好了怎么运行 相信问这样问题的朋友一定是刚刚入门Python的初学者 本文就来为大家详细讲讲如何运行Python代码 一般来讲 运行Python代码的方式有两种 一是在Python交互式命令行下运行 另一种是使用文本编辑器
  • andriod 集成三方apk(BaiduNetworkLocation.apk)

    前言 一开始因为这个ap涉及到收费 所以客户没有提供给我们 于是在网上找了个gms包集成 简单集成之后 发现没有起作用 但是此时客户把他们项目上的NLP provider 也就是这个apk 提供给我们了 我也就再没有去解决gms集成的问题
  • R包

    1 数据导入 以下R包主要用于数据导入和保存数据 feather 一种快速 轻量级的文件格式 在R和python上都可使用 readr 实现表格数据的快速导入 readxl 读取Microsoft Excel电子表格数据 openxlsx
  • 【go 笔记】go 项目目录的结构

    原文来自 https github com suhanyujie hello go blob master notes 2021 go pro dir struct md 文章标题 go 笔记 go 项目目录的结构 作者 suhanyuji