+package main
+
+import (
+ "flag"
+ "log"
+ "net/http"
+ "os"
+ "path"
+
+ "github.com/goproxy/goproxy"
+)
+
+type Logged struct{ goproxy http.Handler }
+
+func (l *Logged) ServeHTTP(w http.ResponseWriter, r *http.Request) {
+ log.Print(r.URL)
+ l.goproxy.ServeHTTP(w, r)
+}
+
+func main() {
+ pth := flag.String("root", "/tmp/goproxy", "Path to storage")
+ bind := flag.String("bind", "[::1]:1234", "Address to listen on")
+ proxy := flag.String("proxy", "direct", "GOPROXY value")
+ sumdb := flag.String("sumdb", "off", "GOSUMDB value")
+ flag.Parse()
+ log.SetFlags(0)
+ log.Fatal(http.ListenAndServe(*bind, &Logged{&goproxy.Goproxy{
+ GoBinEnv: append(
+ os.Environ(),
+ "GOPATH="+path.Join(*pth, "gopath"),
+ "GOPROXY="+*proxy,
+ "GOSUMDB="+*sumdb,
+ ),
+ Cacher: goproxy.DirCacher(*pth),
+ }}))
+}