1

从 go 1.13 开始,go modules 使用https://proxy.golang.org/来缓存存储库。考虑到我在 github.com/Ihtkas/libraries 中有一个私有存储库作为 go 模块,并且我将该模块导入到另一个本地 go 代码 sort.go 中。当我使用 GIT_TERMINAL_PROMPT=1 构建本地代码时,go 会使用本地存储库的登录凭据构建 sort.go。在这种情况下,go 是否将私有存储库缓存在 proxy.golang.com 中?当其他人导入相同的私有包并使用有效凭据访问包时,私有 repo 中的包是否从 proxy.golang.com 提供,仅将身份验证转发到 github.com?我的确切问题是

无论如何都会在代理服务器中保存私人回购代码吗?

4

1 回答 1

4

来自https://index.golang.org

如果我不GOPRIVATE从这些服务中设置和请求私有模块,会泄漏什么? 代理和校验和数据库协议仅将模块路径和版本发送到远程服务器。如果你请求一个私有模块,镜像会像任何 Go 用户一样尝试下载它,并以同样的方式失败。有关失败请求的信息不会在任何地方发布。请求的唯一痕迹将在受隐私政策约束的内部日志中。

按照https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modulesGOPRIVATE中的描述工作

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

GOPRIVATE=*.corp.example.com,rsc.io/private

导致 go 命令将路径前缀匹配任一模式的任何模块视为私有模块,包括 git.corp.example.com/xyzzy、rsc.io/private 和 rsc.io/private/quux。

总结一下:如果是私有模块,代理服务会尝试访问它并且会失败。我假设 Go 将退回直接访问它,完全绕过代理。为了防止这种往返,请将您的私有存储库添加到 GOPRIVATE,如果您仍然担心它,请使用类似 wireshark 的东西来确保您的私有模块可以直接访问。

于 2019-11-19T09:16:41.903 回答