- Replace the local exponential backoff helper with github.com/aofei/backoff so `httpGet` uses a well-tested jittered retry loop that still respects context cancellation - Fix the deadline test to expect `context.DeadlineExceeded` Signed-off-by: Aofei Sheng <aofei@aofeisheng.com>
Goproxy
A minimalist Go module proxy handler.
Goproxy has fully implemented the GOPROXY protocol. The goal of this project is to find the most dead simple way to provide a minimalist handler that can act as a full-featured Go module proxy for those who want to build their own proxies.
Features
- Extremely easy to use
- Three structs: goproxy.Goproxy,goproxy.GoFetcher, andgoproxy.DirCacher
- Two interfaces: goproxy.Fetcherandgoproxy.Cacher
 
- Three structs: 
- Built-in support for GOPROXY,GONOPROXY,GOSUMDB,GONOSUMDB, andGOPRIVATE
- Supports serving under other Go module proxies by setting GOPROXY
- Supports proxying checksum databases
- Supports Disable-Module-Fetchheader
Installation
- 
To use this project programmatically, go getit:go get github.com/goproxy/goproxy
- 
To use this project from the command line, download the pre-built binaries from here or build it from source: go install github.com/goproxy/goproxy/cmd/goproxy@latest
- 
To use this project with Docker, pull the pre-built images from here: docker pull ghcr.io/goproxy/goproxy
Quickstart
Write code
Create a file named goproxy.go:
package main
import (
	"net/http"
	"github.com/goproxy/goproxy"
)
func main() {
	http.ListenAndServe("localhost:8080", &goproxy.Goproxy{})
}
Then run it with a GOMODCACHE that differs from go env GOMODCACHE:
GOMODCACHE=/tmp/goproxy-gomodcache go run goproxy.go
Finally, set GOPROXY to try it out:
go env -w GOPROXY=http://localhost:8080,direct
For more details, refer to the documentation.
Run from command line
Refer to the Installation section to download or build the binary.
Then run it with a GOMODCACHE that differs from go env GOMODCACHE:
GOMODCACHE=/tmp/goproxy-gomodcache goproxy server --address localhost:8080
Finally, set GOPROXY to try it out:
go env -w GOPROXY=http://localhost:8080,direct
For more details, check its usage:
goproxy --help
Run with Docker
Refer to the Installation section to pull the image.
Then run it:
docker run -p 8080:8080 ghcr.io/goproxy/goproxy server --address :8080
Finally, set GOPROXY to try it out:
go env -w GOPROXY=http://localhost:8080,direct
For more details, check its usage:
docker run ghcr.io/goproxy/goproxy --help
Community
If you have any questions or ideas about this project, feel free to discuss them here.
Contributing
If you would like to contribute to this project, please submit issues here or pull requests here.
When submitting a pull request, please make sure its commit messages adhere to Conventional Commits 1.0.0.
License
This project is licensed under the MIT License.