今天我们一起了解下go的语言包管理吧。
1 Go Modules是什么?
Go语言通过包管理来封装模块和复用代码,这里我们只介绍Go Modules管理方法
Go Modules于Go语言1.11版本时引入,在1.12版本正式支持,是由Go语言官方提供的包管理解决方案
Modules是相关Go包的集合,是源代码交换和版本控制的单元。go命令直接支持使用Modules,包括记录和解析对其他模块的依赖性
2 Go Modules的使用方法
2.1 环境变量
首先需要设置环境变量,可以使用go env命令查看当前配置。
1 | go env |
如果需要更改 GO111MODULE ,可以使用go env命令
1 | go env -w GO111MODULE=on |
GO111MODULE
- auto:只要项目包含了 go.mod 文件的话启用 Go modules,目前在 Go1.11 至 Go1.14 中仍然是默认值。
- on:启用 Go modules,推荐设置,将会是未来版本中的默认值。
- off:禁用 Go modules,不推荐设置。
GOPROXY
此环境变量主要用于设计Go Module的代理
GOSUMDB
此环境变量用于在拉取模块的时候保证模块版本数据的一致性。
2.2 初始化模块
Go Modules的使用方法比较灵活,在目录下包含go.mod文件即可
首先通过如下命令创建一个新的Module
1 | go mod init [module name] |
然后当前目录会生成go.mod文件,其内容为:
1 | module ModuleName |
Go Modules会自动管理包,如果需要引入依赖,只需要在go.mod下添加以下内容(以gorose为例子)
1 | module ModuleName |
2.3 go get
go get
命令用于拉取新的依赖,以下为go get命令具体用法
go get | 拉取依赖,会进行指定性拉取(更新),并不会更新所依赖的其它模块。 |
---|---|
go get -u | 更新现有的依赖,会强制更新它所依赖的其它全部模块,不包括自身。 |
go get -u -t ./... | 更新所有直接依赖和间接依赖的模块版本,包括单元测试中用到的。 |
其他参数
1 | -d 只下载不安装 |
2.4 常用命令
1 | go mod init // 初始化go.mod |
参考
[1] https://github.com/datawhalechina/go-talent/blob/master/8.包管理.md