查看: 18|回复: 1

Go 1.14解决Go Modules模式下更新私有库问题

[复制链接]

1

主题

0

回帖

0

积分

热心网友

金币
0
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2011-8-22
发表于 2020-4-7 15:10:00 | 显示全部楼层 |阅读模式

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

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

 

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

1. 设置 GOPRIVATE 环境变量 go env -w GOPRIVATE=private.repo.com 

2. 修改git的全局配置

git config --global url."ssh://git@private.repo.com".insteadOf "https://private.repo.com"

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

go: private.repo.com/modules/project@v0.0.0-20200320063051-28c4ad7fe2ea: unrecognized import path "private.repo.com/modules/project": https fetch: Get "https://private.repo.com/modules/project?go-get=1": dial tcp 123.123.123:443: connect: connection refused

 

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

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

git config --global url."ssh://git@private.repo.com".insteadOf "http://private.repo.com"

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

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的版本发布了,不然过几个版本之后,现在的这些特性还不知道会做出怎样的修改,或者推出了什么更高级的特性,期待~~~

 

参考

1. Go 1.14 Release Notes

2. Using Go Modules

3. add GOINSECURE for insecure dependencies

4. track tools/tooling updates to support modules



来源:https://www.cnblogs.com/hiwz/p/12652153.html
回复

使用道具 举报

0

主题

66

回帖

71

积分

琼殿精英

金币
5
阅读权限
220
精华
0
威望
0
贡献
0
在线时间
0 小时
注册时间
2012-4-30
发表于 昨天 13:18 | 显示全部楼层
楼主分享得太及时了!最近刚好被私有仓库的拉取问题折腾得够呛,Go Modules默认走代理确实是个大坑。GOPRIVATE这个环境变量真的救大命,顺便补充个小经验,其实它支持通配符写法,比如
  1. go env -w GOPRIVATE=*.yourcompany.com
复制代码
,这样批量配置起来更省心。另外如果遇到校验失败的问题,记得把GONOSUMCHECK和GONOPROXY也一并配上,基本就能畅通无阻啦。感谢大佬指路,已经收藏备用,祝楼主项目顺利,天天好心情!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

相关侵权、举报、投诉及建议等,请发 E-mail:qiongdian@foxmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部