如何使用模块
如果安装并支持模块
如果需要使用模块,有以下两种方式(个人推荐方式一)
当你完成安装后,你有一下两种方式启用模块支持
- 在
$GOPATH/src
树之外的目录中调用go
命令,并在当前目录或其任何父目录中使用有效的go.mod
文件,并且未设置环境变量GO111MODULE
(或将其显式设置为auto)。 - 在设置了环境变量的
GO111MODULE=on
调用go
命令。
如何声明一个模块
为一个已经存在的项目创建一个go.mod
文件:
-
进入到项目根目录
$ cd <project path>
如果是
GOPATH
路径外,你不需要用GO111MOUDLE
显式激活。如果你想要在
GOPATH
路径内使用:$ # for linux or mac $ export GO111MOUDLE=on $ cd $GOPATH/src/<project path>
-
对项目进行模块初始化,并将信息写入
go.mod
$ go mod init
这一步将会创建
go.mod
并将模块信息写入,同时如果目录存在其他类型的模块管理工具,将会自动匹配并以require
指令导入到go.mod
文件中。
共支持9种依赖引用格式:- GLOCKFILE
- Godeps/Godeps.json
- Gopkg.lock
- dependencies.tsv
- glide.lock
- vendor.conf
- vendor.yaml
- vendor/manifest
- vendor/vendor.json
有关此部分的详细信息请查看:Go-模块转换
值得注意的是,如果你引用了
v2+
的模块,或者正在构建、初始化这类模块,需要在go mod init
指令运行之后,手动编辑go.mod
、Go文件,引用指定的模块路径。
可以参考语义版本控制
进行修正。
即使已经从其他以来管理工中转换过来了。
直到你成功运行go build
指令后,你才可以使用go tidy
指令。 -
正常操作希望操作的指令即可
go build ./...
go test ./...
go test all
如何升级或降级依赖版本
日常的升级、降级操作通过指令go get
自动更新go.mod
文件来实现,当然,你可以选择直接编辑go.mod
文件。
Go指令go build
、go test
甚至 go list
也会将必要的依赖引入进来(更新go.mod
文件,同时下载需要的依赖)。
将指定依赖升级到最高可用版本:
$ go get example.com/package
更新某个依赖项以及他的依赖到最新可用版本
$ go get -u example.com/package
查看所有依赖(直接或间接)的minor
和patch
的最高可用信息。
$ go list -u -m all
查看所有直接引用的模块的minor
和patch
版本信息
$ go list -u -f '{{if (and (not (or .Main .Indirect)) .Update)}}{{.Path}}: {{.Version}} -> {{.Update.Version}}{{end}}' -m all 2> /dev/null
注
go list -u -f
为格式化输出,-f后面跟上格式化方式,支持基本布尔运算。
这句话理解起来有些难度,用处不是特别大,比如你想查找所有的目录,可以使用:
$ go list -f {{.Dir}}
加上直接依赖
$ go list -f {{if (or .Main .Indirect)}}
后面的指令可以类推
更多详细的信息可以查看
$ go help list
在当前模块内,将所有直接或间接依赖升级到最新最新可用版本,在根目录运行:
$ go get -u ./...
或
$ go get -u=patch
升级指定包
$ go get foo
或
$ go get -u foo