本文视频地址
Go 语言典型我的项目构造
在多年的 Go 语言实际积攒后逐步造成了一种典型我的项目构造,如下图所示:
下面就是一个反对构建二进制可执行文件(在 src 下)的典型 Go 我的项目的构造。
- 1 src 目录:寄存我的项目要编译构建的可执行文件对应的 main 包的源文件。如果有多个可执行文件须要构建,每个可执行文件的 main 包独自放在一个子目录中,比方图中的 appA、appB;src 目录下的各 app 的 main 包将整个我的项目的依赖连贯在一起。咱们在 main 包中会做一些命令行参数解析、资源初始化、日志设施初始化、数据库连贯初始化等工作,而后会将程序的执行权交给更高级的执行对象。
- 2 pkg 目录:寄存我的项目本身要应用、同样也是可执行文件对应 main 包所要依赖的库文件;还能够被内部我的项目援用。
- 3 Makefile:这里的 Makefile 是我的项目构建工具所用的脚本。Go 并没有内置如 make 等级别的我的项目构建工具,对于规模较大的我的项目而言,工具是不可短少的。在 Go 典型我的项目中,我的项目构建工具的脚本个别放在我的项目顶层目录下,如下面的 Makefile;如果脚本较多的我的项目,也能够建设 build 目录。
- 4 go.mod 和 go.sum:Go 语言包依赖治理应用的配置文件。Go 1.11 版本引入 go modules 机制,因而新我的项目倡议基于 go modules 进行包依赖治理。
5 vendor 目录(可选):vendor 是 Go 1.5 版本引入的用于在我的项目本地缓存特定版本依赖包的机制,在 go modules 机制引入前,go modules 自身就能够实现构建,而无需 vendor,因而这里将 vendor 目录是一个可选目录。
Go 语言典型我的项目构造(构建库类型)
Go 1.4 公布时,Go 语言我的项目本身去掉了 src 下的 pkg 这一层目录,这个构造上的扭转对那些只编译为库的 Go 语言库类型我的项目构造有着肯定的影响。咱们来看一个典型的 Go 语言库类型我的项目的构造布局:
咱们看到库类型我的项目相比于构建二进制可执行文件的我的项目要简略一些:
- 去除了 src 和 pkg 两个子目录;
- 库我的项目仅通过 go.mod(或其余包依赖管理工具的 manifest 文件)明确表述出该我的项目依赖的模块或包以及版本要求即可。