Go Modules和GOPROXY简介
文章目录
随着Go 1.13发布,GOPROXY默认值proxy.golang.org在中国大陆不能被访问。
七牛云顺势推出goproxy.cn,以利于中国开发者更好使用Go Modules,它是非盈利性的项目,首先感谢七牛云。
Windows下使用教程:
1. 升级到Go1.13
2. 运行
可以通过运行go env查看(2)、(3)步骤是否设置成功
- 在项目跟目录下执行go mod init
,执行成功后生成go.mod文件
其他指令
|
|
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。