Go GOPROXY "410 Gone" / "reading ... 404" - Fix Proxy Fetch Errors
Go asked the module proxy for a version and got 410 Gone or 404 Not Found. The proxy has no record of that module or version - it was removed, never existed, or is private and not reachable through a public proxy.
What this error means
A module fetch fails with reading https://proxy.golang.org/.../@v/vX.Y.Z.info: 410 Gone or a 404. It can be deterministic (a genuinely missing version) or transient (a proxy hiccup that clears on retry).
go: github.com/example/lib@v1.9.9: reading
https://proxy.golang.org/github.com/example/lib/@v/v1.9.9.info: 410 Gone
server response: not found: ... invalid version: unknown revision v1.9.9Common causes
The version does not exist on the proxy
A tag was deleted upstream, never published, or mistyped. The public proxy returns 410/404 because it has nothing to serve for that exact version.
A private module routed through the public proxy
Without GOPRIVATE/GONOSUMDB, Go asks proxy.golang.org for a private repo it cannot see, and gets a not-found.
Transient proxy or network failure
An intermittent proxy error or DNS blip can surface as a fetch failure that succeeds on retry.
How to fix it
Verify the version exists and is spelled right
go list -m -versions github.com/example/lib
# then pin a version that actually exists
go get github.com/example/lib@v1.9.0Exclude private modules from the public proxy
Tell Go which paths are private so it bypasses the proxy and checksum database for them.
export GOPRIVATE=github.com/yourorg/*
# or route everything direct
export GOFLAGS=-mod=mod GOPROXY=directRetry transient proxy failures
A genuine 410 for a missing version will not fix itself, but an intermittent proxy/network error usually clears on a second attempt.
How to prevent it
- Pin to versions that exist and are not force-pushable.
- Set
GOPRIVATEfor internal modules so they skip the public proxy. - Cache the module download cache so CI re-fetches less from the proxy.