第十章:go mod操作

发布时间 2023-04-03 20:57:04作者: YangYi215

参考博客:

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常见错误

  1. 使用go get -u github.com/astaxie/beego@v2.0.1,提示invalid version: unknown revision v2.0.1

别人项目

  1. 项目代码,具体的文件中直接 import 包,拿到项目自己生成go.mod文件,下载需要的包就行。【go mod开启】
  2. 项目代码中含有vendor文件夹。【不考虑这种,vscode不行】

自己项目

需要使用别人包时,使用go get即可。【go mod开启】