Go填坑之将Private仓库用作module依赖

本文介绍了在Go 1.12和1.13版本中,如何解决配置私有仓库访问的问题。在1.12版本,常用解决方案是设置git使用ssh,但此方法与GOPROXY冲突。而在1.13版本后,由于checksum校验,该方法失效。为解决这个问题,Go引入了GOPRIVATE环境变量,通过设置该变量,可以避免goget在处理私有仓库时进行GOPROXY和CHECKSUM检查。同时,提供了配置git使用ssh的通用方法,以确保对github.com和gitlab.com使用ssh协议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.12版本解决方案

1.111.12版本中,比较主流的解决方案是配置git强制采用ssh

这个解决方案在许多博客、问答中都可以看到:

git config --global url."git@gitlab.com:xxx/zz.git".insteadof "https://gitlab.com/xxx/zz.git"

但是它与GOPROXY存在冲突,也就是说,在使用代理时,这个解决方案也是不生效的。

1.13版本解决方案

1.13版本之后,前面介绍的解决方案又会导致go get出现另一种错误:

get "gitlab.com/xxx/zz": found meta tag get.metaImport{Prefix:"gitlab.com/xxx/zz", VCS:"git", RepoRoot:"https://gitlab.com/xxx/zz.git"} at //gitlab.com/xxx/zz?go-get=1
  verifying gitlab.com/xxx/zz@v0.0.1: gitlab.com/xxx/zz@v0.0.1: reading https://sum.golang.org/lookup/gitlab.com/xxx/zz@v0.0.1: 410 Gone

这个错误是因为新版本go mod会对依赖包进行checksum校验,但是私有仓库对sum.golang.org是不可见的,它当然没有办法成功执行checksum

也就是说强制git采用ssh的解决办法在1.13版本之后GG了。

当然Golang在堵上窗户之前,也开了大门,它提供了一个更方便的解决方案:GOPRIVATE环境变量。解决以上的错误,可以这样配置:

export GOPRIVATE=gitlab.com/xxx

它可以声明指定域名为私有仓库,go get在处理该域名下的所有依赖时,会直接跳过GOPROXYCHECKSUM等逻辑,从而规避掉前文遇到的所有问题。

另外域名gitlab.com/xxx非常灵活,它默认是前缀匹配的,所有的gitlab.com/xxx前缀的依赖模块都会被视为private-modules,它对于企业、私有Group等有着一劳永逸的益处。

提示:如果你通过ssh公钥访问私有仓库,记得配置git拉取私有仓库时使用ssh而非https

可以通过命令git config ...的方式来配置。也可以像我这样,直接修改~/.gitconfig添加如下配置:

[url "git@github.com:"]
    insteadOf = https://github.com/
[url "git@gitlab.com:"]
    insteadOf = https://gitlab.com/

即可强制go get针对github.comgitlab.com使用ssh而非https

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

偶是江湖中人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值