We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
确定。
go version
$ go version go version go1.14.6 linux/amd64
go env
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/home/k/.cache/go-build" GOENV="/home/k/.config/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="linux" GOINSECURE="" GONOPROXY="" GONOSUMDB="" GOOS="linux" GOPATH="/home/k/go" GOPRIVATE="" GOPROXY="http://localhost,direct" GOROOT="/usr/local/go" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64" GCCGO="gccgo" AR="ar" CC="gcc" CXX="g++" CGO_ENABLED="1" GOMOD="/home/k/projects/goproxy/go.mod" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2" PKG_CONFIG="pkg-config" GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build263290122=/tmp/go-build -gno-record-gcc-switches"
编译了一个 goproxy,main.go 中缓存设置为了磁盘当前目录,g.Cacher = &cacher.Disk{Root: ""},在连互联网的情况下拉取一些项目的依赖,让goproxy能缓存到磁盘。 然后断开互联网,并删除 $GOPATH/pkg/mod 目录,并对所有工程重新执行 go build,希望能从本地goproxy的磁盘缓存中拉取依赖到 $GOPATH/pkg/mod 中并正常编译。
g.Cacher = &cacher.Disk{Root: ""}
期望看到可以正常拉取依赖并编译成功所有断网前拉取过依赖的项目。
看上去本地的goproxy服务可以从磁盘缓存中Serve源代码,但没有从磁盘Serve sumdb,导致go build 工程时提示 :
...verifying module: ... 404 not found. server response: not found: fetch timed out
有没有可能给goproxy增加优先从本地文件缓存中提供mod sum 信息的功能?
The text was updated successfully, but these errors were encountered:
你好,首先抱歉这么久才回复你。由于这一阵子在忙的事情有点多,所以你的这个问题我就放在了 TODO 列表里,然后不小心就忘记了回答,实在是不好意思……
如果你希望 goproxy.Goproxy.ProxiedSUMDBs 能够支持从 goproxy.Cacher 中存取数据,那我能告诉你的是我们并不能这样做。因为被代理的校验和数据库的内容都是可变的,所以将其缓存下来并不是一个正确的做法。
事实上,你遇到的问题很好解决,你只需要换个思路。
如果你的 Goproxy 服务是跑在公司内部,那么你可以为其指定好 GOSUMDB 环境变量,这样 goproxy.Goproxy 在从上游代理拉取模块数据后会依据你的设置来校验它们,只有校验通过时才会存入 goproxy.Cacher。换句话说,这种情况下你存入 goproxy.Cacher 的模块数据都是 100% 可信的。此时,公司内部的员工在使用你的这个 Goproxy 服务时就可以放心的将他们本地自己的 GOSUMDB 设置为 off 了,因为他们从你这拉取的数据都是可信的,因此校验反倒成了多余的。
GOSUMDB
off
大致代码如下:
package main import ( "net/http" "os" "github.com/goproxy/goproxy" ) func main() { http.ListenAndServe("localhost:8080", &goproxy.Goproxy{ GoBinEnv: append( os.Environ(), "GOPROXY=https://goproxy.cn,direct", // 使用 Goproxy.cn 作为上游代理 "GOSUMDB=sum.golang.google.cn", // 确保从上游拉取的模块数据都是可信任的 "GOPRIVATE=git.example.com", // 解决私有模块的拉取问题(比如可以配置成公司内部的代码源) ), ProxiedSUMDBs: []string{ "sum.golang.org https://goproxy.cn/sumdb/sum.golang.org", // 代理默认的校验和数据库 }, }) }
Sorry, something went wrong.
No branches or pull requests
你确定我们的常见问题页面中没有你想要询问的问题吗?
确定。
当你执行
go version
命令后的输出结果是什么?当你执行
go env
命令后的输出结果是什么?go env
的输出结果你做了什么?
编译了一个 goproxy,main.go 中缓存设置为了磁盘当前目录,
g.Cacher = &cacher.Disk{Root: ""}
,在连互联网的情况下拉取一些项目的依赖,让goproxy能缓存到磁盘。然后断开互联网,并删除 $GOPATH/pkg/mod 目录,并对所有工程重新执行 go build,希望能从本地goproxy的磁盘缓存中拉取依赖到 $GOPATH/pkg/mod 中并正常编译。
你期望看到的结果是什么?
期望看到可以正常拉取依赖并编译成功所有断网前拉取过依赖的项目。
你实际看到的结果是什么?
看上去本地的goproxy服务可以从磁盘缓存中Serve源代码,但没有从磁盘Serve sumdb,导致go build 工程时提示 :
有没有可能给goproxy增加优先从本地文件缓存中提供mod sum 信息的功能?
The text was updated successfully, but these errors were encountered: