GOPATH 模式
GOPATH为环境变量 包含bin、pkg、src三部分
GOPATH:项目根路径
- src:项目源代码
- bin:项目编译的二进制文件 可执行程序
- pkg:项目编译的中间产物 加速编译 第三方依赖包
运行方式:
所有工程代码要求放在GOPATH/src目录下,工程本身也将作为一个依赖包,可以被其它 GOPATH/src 目录下的工程引用 在 GOPATH/src下进行 .go 文件或源代码的存储,我们可以称其为 GOPATH 的模式
缺点:
- 没有版本控制的概念
- 所有项目都要放在$GOPATH/src目录下,不在当前目录则不能编译
GO Vendor模式
在每个项目下都创建一个vendor目录,每个项目所需要的以来都会下载到自己的vendor目录下。在使用包时,会先从当前项目下的vendor目录查找,然后再从GOPATH中查找,都没有找到最后才在GOROOT中查找(依赖寻址方式:vendor -> GOPATH)
缺点:
- 放弃了依赖重用,使得冗余度上升
- 无法控制依赖的版本 更新项目可能出现依赖冲突 导致编译出错
Go Module模式
go module是Go1.11版本之后官方推出的版本管理工具,并且从Go1.13版本开始,go module将是Go语言默认的依赖管理工具。常用的go mod命令如下:
go mod init 初始化当前文件夹, 创建go.mod文件
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod tidy 增加缺少的module,删除无用的module
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖