2.23 Go之go mod包依赖管理工具使用详解
go module
Go语言默认的依赖管理工具
使用module
设置GOMODULE
设置GoModule
- 
GOMODULE=off禁用go module,编译时会从GOPATH和vendor文件夹中查找包;
- 
GOMODULE=on启用 go module,编译时会忽略GOPATH和vendor文件夹,只根据go.mod下载依赖;
- 
GOMODULE=auto(默认值),当项目在 GOPATH/src 目录之外,并且项目根目录有go.mod文件时,开启go module。
Windows下设置:
set GO111MODULE = on 或者 set GO111MODULE = auto
MacOS或者Linux下设置:
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 | 解释为什么需要依赖 | 
GOPROXY
proxy代理服务器。国内有防火墙存在,所以有些第三方包无法通过go get获取。所以需要设置GOPROXY通过中间代理商获取到相应的资源。
目前公开的代理服务器:
- 
goproxy.io;
- 
goproxy.cn:(推荐)由国内的七牛云提供。
windows下设置:
go env -w GOPROXY=https://goproxy.cn,direct // 域名
MacOs或者Linux下设置:
export GOPROXY=https://goproxy.cn
使用go get下载指定版本的依赖包
执行go get命令,在下载依赖包的同时还可以指定依赖包的版本。
- 
运行 go get -u命令会将项目中的包升级到最新的次要版本或者修订版本;
- 
运行 go get -u=patch命令会将项目中的包升级到最新的修订版本;
- 
运行 go get [包名]@[版本号]命令会下载对应包的指定版本或者将对应包升级到指定的版本。
go get [包名]@[版本号]命令中版本号可以是 x.y.z 的形式,例如 go get foo@v1.2.3,也可以是 git 上的分支或 tag,例如 go get foo@master,还可以是 git 提交时的哈希值,例如 go get foo@e3702bed2。
在项目中使用
使用Goland新建项目会初始化一个go.mod文件。go.mod文件一旦创建后,它的内容将会被go toolchain全面掌控,go toolchain 会在各类命令执行时,比如go get、go build、go mod等修改和维护go.mod文件。
go.mod提供了module、require、replace和exclude四个命令:
- 
module语句指定包的名字(路径);
- 
require语句指定的依赖项模块;
- 
replace语句可以替换依赖项模块;
- 
exclude语句可以忽略依赖项模块。
升级依赖:
使用命令go list -m -u all来检查可以升级的 package,使用go get -u need-upgrade-package升级后会将新的依赖版本更新到 go.mod * 也可以使用go get -u升级所有依赖
使用replace替换无法直接获取的package
modules可以通过在go.mod文件中使用replace指令替换成github上对应的库
replace (
    golang.org/x/crypto v0.0.0-20190313024323-a1f597ede03a => github.com/golang/crypto v0.0.0-20190313024323-a1f597ede03a
)
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号