Go 下载模块的原始代理

Go 下载模块的原始代理,go,dependency-management,go-modules,go-packages,Go,Dependency Management,Go Modules,Go Packages,假设您正在使用Go 1.13,并为Go模块设置了一个初始化的项目 $ mkdir my-project $ cd my-project $ git mod init github.com/bmuschko/my-project 您没有使用默认的Google代理来下载依赖项,而是设置了一个或多个不同的代理 $ export GOPROXY=https://gocenter.io 下载依赖项后,Go似乎不会跟踪原始代理。最后,无法知道或验证依赖项是否来自Google代理、自定义代理或直接来自源代

假设您正在使用Go 1.13,并为Go模块设置了一个初始化的项目

$ mkdir my-project
$ cd my-project
$ git mod init github.com/bmuschko/my-project
您没有使用默认的Google代理来下载依赖项,而是设置了一个或多个不同的代理

$ export GOPROXY=https://gocenter.io

下载依赖项后,Go似乎不会跟踪原始代理。最后,无法知道或验证依赖项是否来自Google代理、自定义代理或直接来自源代码存储库。理论上,如果在两个代理之间切换,即使拉取相同的版本,校验和也可能不同,这取决于原始代理

$ go get github.com/spf13/cobra

是否将此信息存储在缓存中的某个位置?我找不到这个信息。任何建议都将不胜感激。

原始代理不应重要,也不会被记录:如果您从任何地方下载了模块,则模块缓存中的字节应与
go.sum
文件或全局缓存中的校验和匹配


(下载模块或将校验和添加到
go.sum
文件之前,
go
命令会从数据库中获取任何新模块依赖项的校验和。)

“理论上,如果在原始代理之间切换,即使拉取相同的版本,校验和也可能会有所不同。”?“下载依赖项后,Go似乎不会跟踪原始代理。“这是真的,但它确实在go.sum中记录了校验和。只要校验和不改变,代理是否改变真的很重要吗?@Volker只要稍微改变源代码,并将其上传到具有相同语义版本的不同存储库,校验和就可能不同。易于复制…为GitHub上的模块创建一个标记,例如v1.2.3,更改代码并覆盖现有标记。这与模块代理无关。但更重要的是,校验和写入go.sum(应该签入),因此如果代理突然提供不同的代码,go会注意到并告诉您。只有在第一次安装模块时,您才需要依赖数据库。我认为对于企业来说,即使校验和保持不变,源代码也很重要。如果管道直接拉向github或goproxy(具有清理策略),那么重复性是有问题的。用户可以从GitHub中删除标记。