Go Mod 是 Go 1.11 版本后推出的一种官方的包管理工具,主要目的是为了解决Go语言包依赖管理问题。与Go早期使用的依赖工具如dep和glide相比,Go Mod 更加简单易用、易于维护,同时能够保证项目的版本控制,让多人协同工作更加平滑高效。
一、初始化项目
在使用 Go Mod 前需要对您的项目进行初始化,通过如下命令,Go Mod会帮您创建一个go.mod配置文件。
go mod init <module name>
其中,<module name>指的是你的go module名称,一般来说这个名称是你的项目所在的文件夹名称。
通过上述命令初始化后,工具会自动的为你的项目创建一个go.mod文件,文件内容包含项目名称、当前项目版本和根模块声明。
二、管理依赖包
Go Mod 的关键特性就是管理第三方包的依赖关系和版本,从而减轻包管理的负担。
在初始化好项目之后,使用以下命令添加一个新的第三方依赖包到项目中:
go get <module name>
其中,<module name>指的是你需要添加的第三方依赖包名称。如果需要添加的包依赖其他包,Go Mod会自动的解析并下载其依赖的包。
当然,Go Mod 还允许我们快速地修改导入包的版本,只需要使用以下命令即可:
go get <module name>@v<version>
其中,<version>是指需要安装的版本号。如果是最新的版本,则输入latest。
三、代码重构
当我们从glide或dep转换到Go Mod时,必须重构代码使其变得兼容。代码应该通过以下命令进行转换,并通过go mod tidy 命令进行代码清理。
- 将所有的依赖项(包)移动到相应的 go.mod 文件中。然后用 go mod tidy 删除不需要的依赖项。
- 导入语句应该以一个底线代替 GOPATH/src。
- 引用_package以生成和存储本地副本。
- 将 Go 版本升级至 v1.11以上(目前 Go Mod 只能支持 v1.11 以上的 Go 版本)。
四、Vendor 目录管理
Vendor 目录可以用来存储第三方依赖包的源代码。在 Go 1.11 之前,第三方依赖包可能会被放在 $GOPATH/src/ 相关目录中,同时,在这之前传递依赖关系是非常麻烦的。
但是,从 Go 1.11 版本开始,Go Mod 工具被更广泛的使用,设计者开始扩展特性以便能够以更便携、更可读的方式管理第三方依赖包。为了避免服务器端包的缺少造成的问题,Go Mod 还在 go.sum 文件中记录了包的 Git 哈希值以及其他元数据。
通过使用 go mod vendor,您可以将当前项目的依赖项中的所有包和源代码复制到项目的 vendor 目录中。例如
go mod vendor
这将在项目根目录中创建一个 vendor 子文件夹,其中包括由 go.mod 定义的所有的外部引用和它们的子链。
五、总结
Go官方提供的Go Mod工具是项目依赖管理和版本控制的必备工具,其优点在于方便、易用、易于维护和版本控制。 通过使用Go Mod和vendor文件夹,您可以轻松处理依赖项和服务器端缺失情况。
对于Go开发的项目,我们强烈建议使用Go Mod来解决本地和服务器上的依赖管理问题和版本控制问题。