GO go modules 的 go mod
Posted 机智的小张(。ò ∀ ó。)
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GO go modules 的 go mod相关的知识,希望对你有一定的参考价值。
go mod
go mod 是什么?
go modules 模块是相关Go包的集合。modules是源代码交换和版本控制的单元。
go命令直接支持使用modules,包括记录和解析对其他模块的依赖性。modules替换旧的基于GOPATH的方法来指定在给定构建中使用哪些源文件。
代理设置
随着 module 概念引入 go 语言,每个引入的 module都有了版本。随着代码库的不断更新迭代,大家即使是对同一个代码库的引用也可能用了不同的 tag 或者 commit hash。于是,我们需要一个 proxy(代理)。
代理地址
主要有两个地址,如下:
1.https://goproxy.io
2.https://athens.azurefd.net
设置方法
Windows:
$env:GOPROXY = “https://goproxy.io”
Linux:
export GOPROXY=https://goproxy.io
如何使用go.mod?
- 首先将go的版本升级为1.11以上
- 设置GO111MODULE
GO111MODULE值 | 描述 |
---|---|
off | go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者GOPATH模式来查找。 |
on | go命令行会使用modules,而一点也不会去GOPATH目录下查找。 |
auto | 默认值,go命令行将会根据当前目录来决定是否启用module功能。这种情况下可以分为两种情形:1. 当前目录在GOPATH/src之外且该目录包含go.mod文件2. 当前文件在包含go.mod文件的目录下面。 |
go mod详细命令
go.mod 提供了 module、require、replace 和 exclude 四个文件命令,如下:
go mod文件命令 | 描述 |
---|---|
module | 语句指定包的名字(路径) |
require | 语句指定的依赖项模块 |
replace | 语句可以替换依赖项模块 |
exclude | 语句可以忽略依赖项模块 |
go mod命令
go mod命令 | 意义描述 |
---|---|
go mod download | 下载模块到本地缓存,缓存路径是 $GOPATH/pkg/mod/cache |
go mod edit | 是提供了命令版编辑 go.mod 的功能,例如 go mod edit -fmt |
go.mod | 会格式化 go.mod |
go mod graph | 把模块之间的依赖图显示出来 |
go mod init | 生成 go.mod 文件,此命令会在当前目录中初始化和创建一个新的go.mod文件,该命令是为了简便操作。 |
go mod tidy | 增加缺失的包,移除没用的包 |
go mod vendor | 把依赖拷贝到 vendor/ 目录下 |
go mod verify | 确认依赖关系 |
go mod why | 解释为什么需要包和模块 |
注意有几个地方需要注意:
- go mod 命令在$GOPATH 里默认是执行不了的,因为 GO111MODULE 的默认值是 auto。默认在 $GOPATH 里是不会执行, 如果一定要强制执行,就设置环境变量为on。
- go mod init 在没有接module名字的时候是执行不了的,会报错 go: cannot determine module path for source directory。可以这样执行
- 遇到这个go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules’问题
开启go module:
set GO111MODULE=on //windows
export GO111MODULE=on //linux
- 遇到$GOPATH/go.mod exists but should not问题
开启模块支持后(set GO111MODULE=on),并不能与 G O P A T H 共存,所以把 GOPATH共存,所以把 GOPATH共存,所以把GOPATH从env中移出即可(unset GOPATH),可运行“unset GOPATH && make”。
go mod的使用
- 创建一个空的项目文件夹
D:\\…\\gomod- 项目初始化:
#Linux
export GO111MODULE=on
export GOPROXY=https://goproxy.io
/#Windows
$env:GO111MODULE=on // 不会去GOPATH目录下查找,使用modules。
$env:GOPROXY=“https: // goproxy.io”//设置代理地址
// 根据当前目录中初始化和创建一个新的go.mod文件
go mod init [module name]
当我们使用 go build,go test 时,go 会自动得更新 go.mod 文件,将依赖关系写入其中。
以上是关于GO go modules 的 go mod的主要内容,如果未能解决你的问题,请参考以下文章
关于go mod 的使用和goland 配置关于go mod 的配置