第十章:go mod操作
参考博客:
https://blog.csdn.net/weixin_39611043/article/details/110133365
https://www.cnblogs.com/niuben/p/12560104.html
常用命令:
// 初始化项目
go mod init test(test为项目名)
// tidy会检测该文件夹目录下所有引入的依赖,写入 go.mod 文件
go mod tidy
// 下载项目依赖,拿到新项目执行即可
go mod download
// 将GOPATH 下的依赖转移至该项目根目录下的 vendor(自动新建) 文件夹下
go mod vendor
// 如果GO111MODULE=on,模块支持,go命令行会使用modules,而一点也不会去GOPATH目录下查找。会优先使用mod下的包【不会使用vendor下的包】
// 如果GO111MODULE=off,无模块支持,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。使用顺序如下
// 1)优先使用vendor目录下面的包
// 2)如果vendor下面没有搜索到,再搜索$GOPATH/src下面的包
// 3)如果$GOPATH下面没有搜索到,那么搜索$GOROOT/src下面的包
// 如果GO111MODULE=auto,默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:
//1)当前目录在GOPATH/src之外且该目录包含go.mod文件,开启模块支持。
//2)当前文件在包含go.mod文件的目录下面。
// 在使用go modules时,GOPATH是无意义的,不过它还是会把下载的依赖存储在$GOPATH/pkg/mod 中,也会把go install 的结果放在 $GOPATH/bin 中。
// go get下载
go get github.com/xxx/xxx // 添加依赖
go get github.com/xxx/xxx@v1.6.2 // 添加指定版本
go get github.com/xxxx/xxx@'<v1.6.2' // 添加指定版本范围
go get github.com/xxxx/xxx@q2516faf3 // 添加指定commit的版本
// 新的项目,如果想要使用之前的包,只需要记住之前包的版本,使用go get 执行包版本下载即可,会自动将信息写入go.mod文件中
// -u 用于下载指定的路径包及其依赖包,默认情况下,不会下载本地已经存在的,只会下载本地不存在的代码包
go get -u github.com/astaxie/beego@v2.0.1
// 校验依赖
go mod verify // 生成go.sum文件
// windows修改GO111MODULE
go env -w GO111MODULE=off // 长期修改
set GO111MODULE=on // 仅修改y
go Moudle常见错误
- 使用
go get -u github.com/astaxie/beego@v2.0.1
,提示invalid version: unknown revision v2.0.1
别人项目:
- 项目代码,具体的文件中直接
import 包
,拿到项目自己生成go.mod
文件,下载需要的包就行。【go mod开启】 - 项目代码中含有
vendor
文件夹。【不考虑这种,vscode不行】
自己项目:
需要使用别人包时,使用go get
即可。【go mod开启】