我开始迁移一个 Go 项目以使用模块进行依赖管理。我的公司有一个内部 go 代理,仅托管私有模块。因此,我需要一种方法从内部代理下载 PRIVATE 模块,比如说goproxy.company.com
和公共模块,如golang.org/x/tools/cmd/goimports
和github.com/sirupsen/logrus
从公开可用的 go 代理(如proxy.golang.org
(下载。我以为这会解决它。
GOPROXY='goproxy.company.com,proxy.golang.org,direct'
GPPRIVATE=*.company.com/*
但是,它在尝试第一个代理和第二个代理后失败,并且从不使用direct
选项作为回退。这是一个已知问题还是我在这里做错了什么?
有没有更好的方法可以做到这一点?公司内部代理是否应该托管公开可用的 go 模块?这是普遍的期望吗?
阅读文档后我有这种感觉。以下是参考资料。
如提案中所述:保护公共围棋模块生态系统
我们希望企业环境可以通过内部代理获取所有模块,包括公共模块和私有模块;
此外,在公司代理的 go 文档中
例如,如果一家公司运行为私有模块提供服务的模块代理,用户将使用以下内容配置 go:
GOPRIVATE=*.corp.example.com GOPROXY=proxy.example.com GONOPROXY=none
这将告诉 go 命令和其他工具模块开始 具有 corp.example.com 子域是私有的,但公司 代理应该用于下载公共和私有模块, 因为
GONOPROXY
已设置为与任何模式都不匹配的模式 模块,覆盖GOPRIVATE
。
Go 1.15 添加了一项功能,现在允许您设置GOPROXY
以跳过代理。
从 Go 1.15 发行说明:
GOPROXY 环境变量现在支持跳过以下代理: 返回错误。代理 URL 现在可以用逗号 (,( 分隔 或管道字符 (|(。如果代理 URL 后跟逗号,则 命令将仅在 404 或 410 之后尝试列表中的下一个代理 HTTP 响应。如果代理 URL 后跟管道字符,则 命令将在出现任何错误后尝试列表中的下一个代理。请注意, GOPROXY 的默认值仍然是 https://proxy.golang.org,direct, 在出现错误时不会回退到直接。
这应该允许您按照问题中的指示设置GOPROXY
。