微网站建设哪家便宜,推广项目,小广告内容,网站的站点地图怎么做构建模式:Go 是怎么解决包依赖管理问题的?
Go 项目的布局标准是什么?
首先,对于以生产可执行程序为目的的 Go 项目,它的典型项目结构分为五部分: 放在项目顶层的 Go Module 相关文件,包括 go.…
构建模式:Go 是怎么解决包依赖管理问题的?
Go 项目的布局标准是什么?
首先,对于以生产可执行程序为目的的 Go 项目,它的典型项目结构分为五部分:
放在项目顶层的 Go Module 相关文件,包括 go.mod 和 go.sum;
cmd 目录:存放项目要编译构建的可执行文件所对应的 main 包的源码文件;
项目包目录:每个项目下的非 main 包都“平铺”在项目的根目录下,每个目录对应一个 Go 包;
internal 目录:存放仅项目内部引用的 Go 包,这些包无法被项目之外引用;
vendor 目录:这是一个可选目录,为了兼容 Go 1.5 引入的 vendor 构建模式而存在的。这个目录下的内容均由 Go 命令自动维护,不需要开发者手工干预。
第二,对于以生产可复用库为目的的 Go 项目,它的典型结构则要简单许多,我们可以直接理解为在 Go 可执行程序项目的基础上去掉 cmd 目录和 vendor 目录。
Go 构建模式是怎么演化的?
Go 程序的构建过程就是确定包版本、编译包以及将编译后得到的目标文件链接在一起的过程。
Go 语言的构建模式历经了三个迭代和演化过程,分别是最初期的 GOPATH、1.5 版本的 Vendor 机制,以及现在的 Go Module。
GOPATH
Go 语言在首次开源时,就内置了一种名为 GOPATH 的构建模式。
在这种构建模式下,Go 编译器可以在本地 GOPATH 环境变量配置的路径下,搜寻 Go 程序依赖的第三方包。
如果存在,就使用这个本地包进行编译;如果不存在,就会报编译错误。
我们可以通过 go get 命令将本地缺失的第三方依赖包下载到本地。
在 GOPATH 构建模式下,Go 编译器实质上并没有关注 Go 项目所依赖的第三方包的版本。
Vendor
vendor 机制本质上就是在 Go 项目的某个特定目录下,将项目的所有依赖包缓存起来,这个特定目录名就是 vendor。
Go 编译器会优先感知和使用 vendor 目录下缓存的第三方包版本,而不是 GOPATH 环境变量所配置的路径下的第三方包版本。这样,无论第三方依赖包自己如何变化,无论 GOPATH 环境变量所配置的路径下的第三方包是否存在、版本是什么,都不会影响到 Go 程序的构建。