解决Go Modules模式下更新私有库问题(转载)

  在Go 1.11之后推出了依赖包管理工具Go Modules之后,Go项目可以在 GOPATH 之外的位置创建,当项目中仅使用了公有库作为依赖时,使用 go get 或 go mod 更新依赖一切如初,没有任何问题。

  由于Go Modules默认使用代理去更新依赖,所以当使用了私有仓库作为依赖时,Go更新依赖的相关命令将不再可用。

go mod私有库问题

通过以下配置,可以实现更新支持https协议的私有库依赖。

  1. 设置 GOPRIVATE 环境变量 go env -w GOPRIVATE=private.repo.com
  2. 修改git的全局配置

然而如果私有库不支持https协议,会报如下的错误。这是因为Go更新依赖时,会强制校验CA证书来确保依赖库的安全性。

解决方法

如果要更新不支持https协议的私有库,还需再做如下的配置。

  1. 需要对git的全局配置做出调整,将https改为http。

这里将git中remote origin的源改为ssh即可;

  1. 添加参数或环境变量。

1) 使用 go get -insecure

这种方式不推荐,原因如下

  1. 添加 -insecure 参数即表示更新依赖时可以不去校验CA证书,但是这会带来一个问题:范围无法界定(overkill),所有与要更新依赖相关联的依赖,均不会去做校验,可能会意外更新到不安全的依赖。

  2. -insecure 仅支持 go get 命令,不支持 go mod 命令,因此使用 go mod 命令时是无法更新不支持https协议的私有库的。

2) 添加 GOINSECURE 参数

推荐这种方式

在Go 1.14中增加了新的环境变量,用于指定哪些域名下的仓库不去校验CA证书。

使用方式同 GOPRIVATE 类似 go env -w GOINSECURE=private.repo.com

感受

  这两天在家折腾Go语言,搞得我很怀疑人生,网上的好多博客都是使用旧版本Go的,在新版本出了一些新特性之后,很多方式都改了。第一次感受到我在紧跟一个开源项目的脚步,还是这么火的一个语言。

  Go现在给我的感觉就是,它还在一个紧锣密鼓的开发阶段,一些特性,一些功能,还没有那么完善。就拿Go Modules来说,它是Go 1.11才推出的一个功能,截止到1.14,还未支持所有的Go Tools,GOINSECURE也是1.14才提供的一个参数,未来如何发展还是未知数。

  Go的开源社区还是相当活跃的,好多疑问都可以在里面找到解答,甚至是官方的解答(找不到中文的博客,只能Google去看Github和Stack Overflow,英文不好的我默默的留下了眼泪)。看来之后我要紧跟Go的版本发布了,不然过几个版本之后,现在的这些特性还不知道会做出怎样的修改,或者推出了什么更高级的特性,期待


原文转载自Go 1.14解决Go Modules模式下更新私有库问题

  1. Go 1.14 Release Notes
  2. Using Go Modules
  3. add GOINSECURE for insecure dependencies
  4. track tools/tooling updates to support modules
赞赏

微信赞赏支付宝赞赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注