GO语言的依赖管理 | 青训营笔记

113 阅读3分钟

Go语言的依赖管理

依赖管理

  • 依赖的概念:编译程序不可能所有东西都自己写,我们会大量使用一些第三方的库来引入自己的代码。
  • 依赖管理的三个阶段:GOPATH、GOVENDOR、go mod

GOPATH和GOVENDOR工作模式

GOPATH工作模式

GOPATH工作模式就是把所有依赖包都放在GOPATH下的src中。

GOPATH依赖管理时依赖所在的目录位置:

此工作模式系统会去GOPATH和GOROOT中寻找引入的第三方库。

  1. 无版本控制概念
  2. 无法同步一致第三方版本号
  3. 无法指定当前项目引用的第三方版本号

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解决了什么问题?
  1. Go语言长久以来的依赖管理问题
  2. “淘汰”现有的GOPATH使用模式
  3. 统一社区中的其他的依赖管理工具(提供迁移功能)

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国内访问不了,需要设置国内的代理。

  • 阿里云

mirrors.aliyun.com/goproxy/

  • 七牛云

goproxy.cn,direct

如:

go env -w GOPROXYU=goproxy.cn,direct

GOPROXY的值是一个以英文逗号“ , ”分割的Go模块代理列表,允许设置多个模块代理,假设你不想使用,也可以将其设置为“ off ”,这将会禁止Go在后续操作中使用任何Go模块代理。

如:

go env -w GOPROXYU=goproxy.cn,http://mirrors.al…