这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天
依赖管理
Go依赖管理演进:GOPATH --> Go Vendor --> Go Module
在GOPATH管理模式下,如果多个项目依赖同一个库,则依赖的库是同一份代码,所以不同项目不能依赖同一个库的不同版本,这很显然不能满足我们的项目依赖需求。
为了解决这问题,Go Vendor为每个项目设置一个Vendor文件夹,其中存放了当前项目依赖的副本。在Vendor机制下,如果当前项目存在Vendor目录,会优先使用该目录下的依赖,如果依赖不存在,会从GOPATH中寻找。
但是这也存在一个问题。如下图项目A依赖Package B和C,而B和C依赖了D的不同版本,通过Vendor的管理模式我们不能很好的控制对于D的依赖版本,一旦更新项目,有可能导致依赖冲突造成编译出错。归根到底Vendor不能很清晰的标识依赖的版本概念。因此,Go Module就应运而生了。
Go Modules是Go语言官方推出的依赖管理系统,解决了之前依赖管理系统存在的诸如无法依赖同一个库的多个版本等问题,一般都读为go mod。Go Modules通过go.mod文件管理依赖包版本,通过 go get/go mod 指令工具管理依赖包。
Go Modules的配置文件go.mod可以在$GOPATH下的src文件夹下找到,如下图:
Proxy的作用是依赖分发,也就是从哪里下载,如何下载的问题。
go get/go mod 的使用如下: