GOPROXY环境变量

从 Go 1.11 版本开始,官方支持了 go module 包依赖管理工具,也新增了 GOPROXY 环境变量。如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载。

公用的代理服务 https://goproxy.io,go 1.13镜像地址改为 https://proxy.golang.org,direct 了。
需要依赖于 go module 功能。可通过 export GO111MODULE=on 开启 MODULE。

export GO111MODULE=on
export GOPROXY=https://goproxy.io

使用 go module 包依赖管理工具 ,go build前确认配置好了上述环境变量,会很方便。

当然可以指定自己的代理

GOPROXY=socks5://127.0.0.1:2333

补充:GO Module学习文档

常用命令:

go mod edit -go=1.13

实不相瞒,我觉得golang的依赖管理真是差劲,对初学者一点都不友好。接手一个项目,依赖时常搞不定。

错误1

go: github.com/hashicorp/gopsutil@v0.0.0-20180427102116-62d5761ddb7d: invalid pseudo-version: does not match version-control timestamp (2019-01-17T15:36:06Z)

格式为v0.0.0-20180427102116-62d5761ddb7d的版本号表示git存储库中没有标记的版本。所以go mod根据git最新的提交时间和SHA-1提交哈希的12位前缀生成一个。

补充伪版本版本校验的概念 。
1) a "pseudo-version" like v0.0.0-yyyymmddhhmmss-abcdefabcdef
2) There are three pseudo-version forms.
3) 如果主模块中的require指令使用了无效的伪版本,通常可以通过将版本编辑为仅提交哈希值并重新运行go命令(例如go list -m allgo mod tidy)来进行更正。
4) 如果主模块的传递依赖项之一要求使用无效版本或伪版本,则可以使用主模块go.mod文件中的replace指令将无效版本替换为有效版本。如果替换是提交哈希,它将被解析为上述适当的伪版本。
5) 如何在go.mod文件中生成所有依赖的模块

错误2

go: github.com/hashicorp/go-msgpack@v0.5.5 used for two different module paths (github.com/hashicorp/go-msgpack and github.com/ugorji/go)

不清楚项目依赖关系,多了就删吧。或者把两个出线的地方版本换成不一样的。

go: finding xxxxx
go: downloading xxxxxx
go: extracting xxxxxx
包在pkg/mod/目录下

补充:go module升级或降级依赖