从go 1.13开始,go模块使用https://proxy.golang.org/来缓存存储库。考虑一下我在github.com/Ihtkas/libraries中有一个私有存储库作为go模块,并且将该模块导入了另一个本地go代码sort.go中。当我使用GIT_TERMINAL_PROMPT = 1构建本地代码时,请使用我的本地存储库的登录凭据来构建sort.go。在这种情况下,go是否将私有存储库缓存在proxy.golang.com中?当其他人导入同一私有软件包并使用有效凭据访问该软件包时,私有回购中的软件包是否通过身份验证从proxy.golang.com提供给github.com? 我的确切问题是
反正进入代理服务器中保存私人回购代码吗?
答案 0 :(得分:2)
如果我没有设置
GOPRIVATE
并从这些服务中请求私有模块,会有什么泄漏? 代理和校验和数据库协议仅将模块路径和版本发送到远程服务器。如果您请求私有模块,则镜像将尝试下载它,就像任何Go用户一样并且以同样的方式失败。有关失败请求的信息不会在任何地方发布。该请求的唯一记录将在内部日志中,该日志受隐私政策约束。
GOPRIVATE
的工作如https://golang.org/cmd/go/#hdr-Module_configuration_for_non_public_modules所述
GOPRIVATE环境变量控制go命令认为哪个模块是私有的(不可公开使用),因此不应使用代理或校验和数据库。该变量是模块路径前缀的逗号分隔的全局模式列表(按照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之类的方法来确保直接访问您的私有模块。