随着Go 1.13发布,GOPROXY默认值proxy.golang.org在中国大陆不能被访问。
七牛云顺势推出goproxy.cn,以利于中国开发者更好使用Go Modules,它是非盈利性的项目,首先感谢七牛云。
Windows下使用教程: 1. 升级到Go1.13 2. 运行 //开启mod 3. 运行 //设置七牛云goproxy代理

可以通过运行go env查看(2)、(3)步骤是否设置成功

tyxMdI.png

  1. 在项目跟目录下执行go mod init ,执行成功后生成go.mod文件

其他指令

1
2
3
4
5
6
go get -u           //更新现有的依赖
go mod tidy         //整理模块(拉取缺少的模块,移除不用的模块)
go mod download     //下载依赖包
go mod graph        //打印现有依赖结构
go mod vendor       //将依赖复制到vendor下
go mod verify       //校验依赖

go.mod部分关键词解析:

module: 模块名称,使用指令go mod init 可设置

require:依赖包列表以及版本

exclude:禁用依赖包列表

replace:替换依赖包列表

go: go版本号

go的环境变量解读

GO111MODULE

这个环境变量主要是 Go modules 的开关,主要有以下参数: - auto:只在项目包含了 go.mod 文件时启用 Go modules,在 Go 1.13 中仍然是默认值,详见 :golang.org/issue/31857。 - on:无脑启用 Go modules,推荐设置,未来版本中的默认值,让 GOPATH 从此成为历史。

- off:禁用 Go modules。

GOPROXY

这个环境变量主要是用于设置 Go 模块代理,主要如下: - 它的值是一个以英文逗号 “,” 分割的 Go module proxy 列表(稍后讲解) - 作用:用于使 Go 在后续拉取模块版本时能够脱离传统的 VCS 方式从镜像站点快速拉取。它拥有一个默认值,但很可惜 proxy.golang.org 在中国无法访问,故而建议使用 goproxy.cn 作为替代。 - 设置为 “off” :禁止 Go 在后续操作中使用任 何 Go module proxy。

刚刚在上面,我们可以发现值列表中有 “direct” ,它又有什么作用呢?

>其实值列表中的 “direct” 为特殊指示符,用于指示 Go 回源到模块版本的源地址去抓取 (比如 GitHub 等),当值列表中上一个 Go module proxy 返回 404 或 410 错误时,Go 自动尝试列表中的下一个,遇见 “direct” 时回源,遇见 EOF 时终止并抛出类似 “invalid version: unknown revision…” 的错误。

GOSUMDB

它的值是一个 Go checksum database,用于使 Go 在拉取模块版本时(无论是从源站拉取还是通过 Go module proxy 拉取)保证拉取到的模块版本数据未经篡改,也可以是“off”即禁止 Go 在后续操作中校验模块版本 - 格式: SUMDB_NAME+PUBLIC_KEY或SUMDB_NAME+PUBLIC_KEY SUMDB_URL。 - 拥有默认值: sum.golang.org (之所以没有按照上面的格式是因为 Go 对默认值做了特殊处理)。 - 可被 Go module proxy 代理 (详见:Proxying a Checksum Database)。 - GOSUMDB 的默认值在中国无法访问,故而更加建议将 GOPROXY 设置为 goproxy.cn,因为 goproxy.cn 支持代理 sum.golang.org。

参考资料:Go Modules与GOPROXY 配置