Go语言的依赖管理
依赖管理
- 依赖的概念:编译程序不可能所有东西都自己写,我们会大量使用一些第三方的库来引入自己的代码。
- 依赖管理的三个阶段:GOPATH、GOVENDOR、go mod
GOPATH和GOVENDOR工作模式
GOPATH工作模式
GOPATH工作模式就是把所有依赖包都放在GOPATH下的src中。
GOPATH依赖管理时依赖所在的目录位置:
此工作模式系统会去GOPATH和GOROOT中寻找引入的第三方库。
- 无版本控制概念
- 无法同步一致第三方版本号
- 无法指定当前项目引用的第三方版本号
5.2.2 GOVENDOR工作模式
GOPATH工作模式有一个问题,当src下存在多个项目时,不同项目是由不同的人编写,在编写时所采用的依赖包版本可能不同,这时GOVENDOR工作模式解决了这个问题。
GOVENDOR工作模式是指在每个项目下创建vendor文件夹用来存放不同版本的依赖包,这样每个项目都会使用自己vendor下的依赖包,就解决了每个项目使用的依赖包版本不同的问题。 5.3 go mod的使用
- 什么是Go Modules?
Go modules是Go语言的依赖解决方案,发布于Go1.11,成长于Go1.12,丰富于Go1.13,正式于Go1.14推荐在生产上使用。
- Go Modules解决了什么问题?
- Go语言长久以来的依赖管理问题
- “淘汰”现有的GOPATH使用模式
- 统一社区中的其他的依赖管理工具(提供迁移功能)
5.3.1 go mod命令
| 命令 | 作用 |
|---|---|
go mod init | 生成go.mod文件 |
go mod download | 下载go.mod文件中指明的所有依赖 |
go mod tidy | 整理现有的依赖 |
go mod graph | 查看现有的依赖结构 |
go mod edit | 编辑go.mod文件 |
go mod vendor | 导出项目所有的依赖到vendor目录 |
go mod verify | 校验一个模块是否被篡改过 |
go mod why | 查看为什么需要依赖某模块 |
| 5.3.2.1 GO111MODULE |
Go语言提供了GO111MODULE这个环境变量来作为Go Modules的开关,其允许设置以下参数:
- auto:只要项目包含了go.mod文件的话启用Go Modules,目前在Go1.11至Go1.14仍是默认值。
- on:启用Go Modules,推荐设置,将会是未来版本中的默认值。
- off:禁用Go Modules,不推荐设置。
5.3.2.2 GOPROXY
这个环境变量主要是用于设置Go模块代理(Go module proxy),其作用是用于使Go在后续拉取模块版本时直接通过镜像站点来快速拉取。用来设置从哪个第三方托管平台下载依赖包,设置好后可以通过import来设置路径,可以自动去下载依赖包。*
GOPROXY的默认值是:http://proxy.golang.org,direct
proxy.golang.org国内访问不了,需要设置国内的代理。
- 阿里云
- 七牛云
goproxy.cn,direct
如:
go env -w GOPROXYU=goproxy.cn,direct
GOPROXY的值是一个以英文逗号“ , ”分割的Go模块代理列表,允许设置多个模块代理,假设你不想使用,也可以将其设置为“ off ”,这将会禁止Go在后续操作中使用任何Go模块代理。
如:
go env -w GOPROXYU=goproxy.cn,http://mirrors.al…