Go依赖管理 | 青训营

54 阅读2分钟

Go依赖管理

在实际工程中,项目一般比较复杂,我们不可能基于标准库0-1编码搭建,而更多的关注业务逻辑的实现,而其他的涉及框架、日志、driver、以及collection等一系列依赖都会通过sdk的方式引入,这样对依赖包的管理就显得尤为重要。

Go 依赖管理演进

Go 的依赖管理主要经历了三个阶段,分别是GOPATH,Go Vender,Go Module,目前应用最广泛的是 Go Module,整个演进路线主要围绕实现两个目标:1、不同环境(项目)依赖的版本不同; 2、控制依赖库的版本。

GOPATH

GOPATH 是 Go 语言支持的一个环境变量,value 是 Go 项目的工作区,项目代码直接依赖 src 下的代码,go get 下载最新版本的包到src 目录下。目录有以下结构:1、src:存放项目源码;2、pkq:存放编译的中间产物,加快编译速度;3、bin:存放编译生成的二进制文件。

Go Vendor

Vendor 是当前项目中的一个目录,其中存放了当前项目依赖的副本。在 Vendor 机制下,如果当前项目存在 Vendor 目录,会优先使用该目录下的依赖,如果依赖不存在,会从 GOPATH 中寻找。通过每个项目引入一份依赖的副本,解决了多个项目需要同一个 package 依赖的冲突问题。 存在的问题:1、无法控制依赖的版本;2、更新项目又可能出现依赖冲突,导致编译出错。

Go Module

Go Module 是 Go 语言推出的依赖管理系统,解决了之前存在的问题。go module 从 Go 1.11 开始实验性引入,Go 1.16 默认开启,一般都读为go mod。 1、通过 go.mod文件管理依赖包版本;2、通过 go get/ go mod 指令工具管理依赖包;3、终极目标:定义版本规则和管理项目依赖关系。