go module 是Go语言从 1.11 版本之后官方推出的版本管理工具,并且从 Go1.13 版本开始,go module 成为了Go语言默认的依赖管理工具。
在Go语言 1.12 版本之前,要启用 go module 工具首先要设置环境变量 GO111MODULE,不过在Go语言 1.13 及以后的版本则不再需要设置环境变量。通过 GO111MODULE 可以开启或关闭 go module 工具。
GO111MODULE=off 禁用 go module,编译时会从 GOPATH 和 vendor 文件夹中查找包;
GO111MODULE=on 启用 go module,编译时会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod下载依赖;
GO111MODULE=auto(默认值),当项目在 GOPATH/src 目录之外,并且项目根目录有 go.mod 文件时,开启 go module。
Windows 下开启 GO111MODULE 的命令为:
set GO111MODULE=on 或者 set GO111MODULE=auto
MacOS 或者 Linux 下开启 GO111MODULE 的命令为:
export GO111MODULE=on 或者 export GO111MODULE=auto
常用的go mod
命令如下表所示:
命令 | 作用 |
---|---|
go mod download | 下载依赖包到本地(默认为 GOPATH/pkg/mod 目录) |
go mod edit | 编辑 go.mod 文件 |
go mod graph | 打印模块依赖图 |
go mod init | 初始化当前文件夹,创建 go.mod 文件 |
go mod tidy | 增加缺少的包,删除无用的包 |
go mod vendor | 将依赖复制到 vendor 目录下 |
go mod verify | 校验依赖 |
go mod why | 解释为什么需要依赖 |
使用go mod init初始化生成 go.mod 文件
go mod init appName
go get github.com/garyburd/redigo/redis
go.mod 文件示例
module github.com/gogf/gf-demos require ( github.com/gogf/gf v1.14.6-0.20201214132204-c685876e6f67 github.com/gogf/swagger v1.2.0 github.com/gorilla/websocket v1.4.2 // indirect github.com/grokify/html-strip-tags-go v0.0.0-20200322061010-ea0c1cf2f119 // indirect github.com/kr/text v0.2.0 // indirect github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect github.com/olekukonko/tablewriter v0.0.4 // indirect golang.org/x/sys v0.0.0-20200610111108-226ff32320da // indirect gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect gopkg.in/yaml.v3 v3.0.0-20200605160147-a5ece683394c // indirect ) go 1.11
module app go 1.16 require ( github.com/garyburd/redigo v1.6.2 // indirect github.com/nahid/gohttp v0.0.1 // indirect )
module myapp require github.com/gogf/gf latest go 1.11