为了账号安全,请及时绑定邮箱和手机立即绑定

我想从 Goproxy 中删除我的私人包

我想从 Goproxy 中删除我的私人包

Go
30秒到达战场 2022-05-17 17:55:40
这是一个 go 模块问题。我的电脑正在运行 go 1.13 并且 go 模块模式已打开。这是我的go env:GO111MODULE="on"GOPRIVATE=""GOPROXY="https://goproxy.io,direct"一开始我写了一个公共包进行测试,并上传到github。然后我“去拿”这个独立包。之后我将其设为私有,甚至从 github 中删除(我尝试了“git clone”但无法再次下载)。但是在我从 github 中删除它之后,我可以“去获取”它。很快我意识到这个包可能缓存在 goproxy.io 或其他代理数据库中。所以我再次设置了 GOPROXY="direct" 和 "go get" 这个包并且失败了。这个动作证明了我的猜测。现在是我的问题:如何从 goproxy.io 或其他数据库中删除整个包。有没有一种安全的方式来使用 go 模块,我不想把我的私有代码错误地上传到其他数据库。我试图 STFW 并没有发现任何东西。感谢大家阅读和回答这个问题。
查看完整描述

2 回答

?
弑天下

TA贡献1818条经验 获得超8个赞

如果你不小心发布了一个你打算私有的包/模块,那么go.dev: About页面:

删除一个包

如果您想删除某个包,请发送电子邮件至go-discovery-feedback@google.com,并附上您要删除的导入路径或模块路径。

但正如 Adrian 在评论中提到的,不能保证没有人下载您发布的软件包。

如果您希望某些包/模块保持私有,您可以在 go 工具尊重的环境变量GOPRIVATEGONOPROXY枚举它们(使用 glob 模式)。GONOSUMDB

命令去:环境变量:

GOPRIVATE, GONOPROXY, GONOSUMDB
  Comma-separated list of glob patterns (in the syntax of Go's path.Match)
  of module path prefixes that should always be fetched directly
  or that should not be compared against the checksum database.
  See 'go help module-private'.

从命令go help module-private

GOPRIVATE 环境变量控制 go 命令认为哪些模块是私有的(不公开),因此不应使用代理或校验和数据库。该变量是以逗号分隔的模块路径前缀的 glob 模式列表(在 Go 的 path.Match 的语法中)。

这些变量也可以使用go env -w命令设置。您可以使用go help env.


查看完整回答
反对 回复 2022-05-17
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

对于问题2,我今天尝试了几次。如果你想安全地构建一个私有包,你应该做的最重要的事情是GOPRIVATE在你构建你的包之前设置。并且GONOPROXYGONOSUMDB将自动设置为与 相同GOPRIVATE。现在你可以编写代码并写入git push一个私人远程仓库并尝试go get它,你会失败并看到一些类似的错误消息:

致命:无法读取“ https://github.com ”的用户名:终端提示已禁用 确认导入路径输入正确。如果这是一个私有存储库,请参阅https://golang.org/doc/faq#git_https了解更多信息。

https该链接向我们表明,如果您将密钥上传到远程 ropo ,我们应该使用带有您的用户名/密码的链接,或者只需将您的 https 链接替换为 ssh 链接。完成后,你go get将从你的源地址(你的包名)而不是代理成功。


Futhurmore,让我们通过 usinggo clean -modcache和 set删除所有 go 模块缓存GOPRIVATE=""。我将测试我们的私有包是否已上传到代理。

案例1:设置GOPROXY="https://goproxy.io"或其他代理,然后go get是私有包。你将面临一个404 Not Found向你表明你从代理中找不到任何东西(这意味着没有任何东西被缓存/存储在代理中)。

案例2:设置GOPROXY="direct"(使用你的包名的直接地址),然后go get是私有包。你会面临这样的错误信息:

验证 {PACKAGENAME}:{PACKAGENAME}:初始化 sumweb.Conn:检查树#{ID}:获取https://sum.golang.org/tile/8/2/000.p/11:拨打 tcp {IP}: {PORT}:I/O 超时。

go get函数将尝试使用您的包检查来自 golang.org 数据库的校验和(我无法直接链接到谷歌服务器,因此它显示超时错误/我猜如果你可以链接到谷歌服务器,你将得到 404)。它表明,如果我们尝试go get使用未设置的私有包GOPRIVATE,您将失败,因为您无法通过检查。


建议:如果你想构建你的私有 go 包,你应该GOPRIVATE首先设置你的包,并确保它足够宽以包含你的包名。


感谢大家阅读和回答这个问题。


查看完整回答
反对 回复 2022-05-17
  • 2 回答
  • 0 关注
  • 240 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信