2

我开始迁移一个 Go 项目以使用模块进行依赖管理。我的公司有一个仅托管私有模块的内部 go 代理。所以,我需要一种从内部代理下载 PRIVATE 模块的方法,比如说从goproxy.company.com公开可用的 go 代理(比如. 我以为这会解决它。golang.org/x/tools/cmd/goimportsgithub.com/sirupsen/logrusproxy.golang.org

GOPROXY='goproxy.company.com,proxy.golang.org,direct'

GPPRIVATE=*.company.com/*

但是,在尝试了第一个代理和第二个代理后它失败了,并且从不使用该direct选项作为后备。这是一个已知问题还是我在这里做错了什么?

有一个更好的方法吗?托管公开可用的 go 模块的公司内部代理是否正常?这是普遍的预期吗?

阅读文档后,我有这种感觉。以下是参考资料。

提案中所述:保护公共 Go 模块生态系统

我们希望公司环境可以通过内部代理获取所有模块,公共的和私有的;

此外,在公司代理的go docs示例中

例如,如果一家公司运行一个为私有模块提供服务的模块代理,用户将使用以下命令配置 go:

GOPRIVATE=*.corp.example.com 
GOPROXY=proxy.example.com 
GONOPROXY=none

这将告诉 go 命令和其他工具,以 corp.example.com 子域开头的模块是私有的,但公司代理应该用于下载公共和私有模块,因为GONOPROXY已设置为不匹配的模式任何模块,覆盖GOPRIVATE.

4

1 回答 1

1

Go 1.15 添加了一项功能,现在允许您设置GOPROXY跳过代理。

Go 1.15 发行说明

GOPROXY 环境变量现在支持跳过返回错误的代理。代理 URL 现在可以用逗号 (,) 或竖线字符 (|) 分隔。如果代理 URL 后跟逗号,则 go 命令只会在 404 或 410 HTTP 响应之后尝试列表中的下一个代理。如果代理 URL 后跟管道字符,则 go 命令将在出现任何错误后尝试列表中的下一个代理。请注意,GOPROXY 的默认值仍然是 https://proxy.golang.org,direct,在出现错误时不会退回到 direct。

GOPROXY这应该允许您按照问题中的指示进行设置。

于 2020-08-16T00:20:32.370 回答