Golang 1.11版本终于支持了官方的模块依赖管理功能,1.11之前想要实现依赖管理只可以经过借助第三方库来实现,1.11之前的版本Golang项目必须依赖以GOPATH,从当前版本开始Golang项目能够彻底脱离GOPATH目录而工做,GOPATH将会逐渐被移除;git
Go mod的使用也比较简单,Golang新增了环境变量GO11MODULE用于控制对Module的支持;
GO111MODULE = off
关闭Module的支持,从GOPATH、vendor目录查找包
GO111MODULE = auto
根据当前目录状况启用Module支持或禁用,只当项目不在GOPATH/src目录当中,而且当前目录中存在go.mod文件时启用Module;
GO111MODULE = on
启用Module支持;github
go mod download:下载模块到本地缓存
go mod edit:编辑go.mod文件
go mod graph:输出打印当前项目的依赖图
go mod init:建立新模块到当前目录
go mod vendor:将依赖拷贝到vendor目录下
go mod tidy:整理模块,移除为使用模块,添加缺乏模块
go mod verify:验证模块正确性
go mod why:查找依赖golang
一、初始化模块
建立项目modtest目录,进入modtest目录:
执行 go mod init modtest初始化模块,能够看到初始化完成后当前目录下生成了一个go.mod文件,因为时刚初始化模块因此打开文件能够看到文件中只有一行:
module modtestredis
二、在当前模块中引用其余第三方模块
建立test.go文件缓存
package main import( "fmt" "github.com/go-redis/redis" ) func main(){ fmt.Println("引用第三方模块 ",redis.Client{}) }
执行go mod tidy 下载依赖,执行go run、go build 一样会下载依赖;测试
执行完成后查看go.mod便可看到相关依赖信息,在GOPATH/pkg/mod目录下能够看获得Golang module下来的所依赖的第三方包;
此时的go.mod已经配置了模块所依赖的第三方包,go.mod内容以下:ui
三、在当前模块引用包代理
在当前目录下建立 submod包(目录),进入submod目录建立sub.go文件code
package submod func Name(){ }
在项目根目录,修改test.go目录引用submod包blog
package main import( "fmt" "github.com/go-redis/redis" "modtest/submod" ) func main(){ fmt.Println("测试 ",redis.Client{}) fmt.Println("包引用 ",submod.Name) }
四、使用module代理
因为某些缘由,某些包不FQ时不能够直接下得下来的,还好go mod提供了代理的设置,而且还提供了https://goproxy.io 代理服务,咱们能够经过设置代理,下载golang.org/x/text等没法直接下载的第三方包;
set GOPROXY = https://goproxy.io