go module
go module
是Go1.11版本之后官方推出的版本管理工具。并且从Go1.13版本开始,go module
将成 Go语言默认的依赖管理工具。
官方文档
https://github.com/golang/go/wiki/Modules
开启go module
首先设置环境变量 GO111MODULE , 通过它可以开启和关闭模块的支持,它有三个值 on
, off
, auto
默认是auto
-
GO111MODULE=off
禁用模块支持,编译时会从GOPATH
和vendor
文件夹中查找包。 -
GO111MODULE=on
启用模块支持,编译时会忽略GOPATH
和vendor
文件夹,只根据go.mod
下载依赖。 -
GO111MODULE=auto
,当项目在$GOPATH/src
外且项目根目录有go.mod
文件时,开启模块支持。
我们把它设置为on go env -w GO111MODULE=on
,之后就可以使用 go module 了 。以后就没有必要在 $GOPATH/src 中创建项目了。并且还能够很好的管理项目的第三方依赖。
**Go PROXY 换成中国代理 **
使用 go module 模式 , 会在项目的根目录下生成两个文件 go.mod
和 go.sum
。
go.mod
Go.mod 文件记录了项目所有的依赖信息。
module blogger
go 1.16
require (
github.com/go-sql-driver/mysql v1.4.1
google.golang.org/appengine v1.6.1 // indirect
)
- module 用来定义包名
- Require 用来定义依赖包以及版本
- Indirect 表示间接引用
go.sum
记录是每个依赖库的版本和哈希值用于验证安全和修改
项目中的基本使用
cd. ~/xxx/yyy/test
#初始化项目
go mod init test(test是项目的名称,名字可以随便)
# 下包
go get github.com/go-redis/redis
go get github.com/go-sql-driver/mysql@v1.4.1
go mod 命令
go mod download 下载依赖的module到本地cache(默认为$GOPATH/pkg/mod目录)
go mod edit 编辑go.mod文件
go mod graph 打印模块依赖图
go mod init 初始化当前文件夹, 创建go.mod文件
go mod tidy 增加缺少的module,删除无用的module
go mod vendor 将依赖复制到vendor下
go mod verify 校验依赖
go mod why 解释为什么需要依赖
go get
在项目中执行 go get
命令可以下载依赖包,并且还可以下载指定的版本
- 运行
go get -u
将会升级到最新的次要版本或者修订版本(x.y.z, z是修订版本号, y是次要版本号) - 运行
go get -u=patch
将会升级到最新的修订版本 - 运行
go get package@version
将会升级到指定的版本号version
如果下载所有的依赖可以使用 go mod download
命令
go tidy
运行 go tidy ,可以删除项目里没有用的依赖包
godep
在Go1.5 release的版本的发布vendor目录被添加到除了GOPATH和GOROOT之外的依赖目录查找的解决方法。 查找依赖包路径的解决 当前包下的vendor目录 先上级的目录查找,直到找到scr的vendor目录 在GOPATH下面查找依赖包 在GOROOT目录下查找
dep安装方式的安装方式是:执行
curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
或
go get github.com/tools/godep
# 要自己设置环境变量
//todo
参考: