Documentation
¶
Overview ¶
Package goproxy implements a minimalist Go module proxy handler.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Cacher ¶
type Cacher interface { // Get gets the matched cache for the `name`. It returns the // `os.ErrNotExist` if not found. // // It is the caller's responsibility to close the returned // `io.ReadCloser`. // // Note that the returned `io.ReadCloser` can optionally implement the // following interfaces: // * `io.Seeker` // For the Range request header. // * `interface{ ModTime() time.Time }` // For the Last-Modified response header. // * `interface{ Checksum() []byte }` // For the ETag response header. Get(ctx context.Context, name string) (io.ReadCloser, error) // Set sets the `content` as a cache with the `name`. Set(ctx context.Context, name string, content io.ReadSeeker) error }
Cacher defines a set of intuitive methods used to cache module files for the `Goproxy`.
type DirCacher ¶ added in v0.4.0
type DirCacher string
DirCacher implements the `Cacher` using a directory on the local filesystem. If the directory does not exist, it will be created with 0750 permissions.
type Goproxy ¶
type Goproxy struct { // GoBinName is the name of the Go binary. // // If the `GoBinName` is empty, the "go" is used. // // Note that the version of the Go binary targeted by the `GoBinName` // must be at least v1.11. GoBinName string // GoBinEnv is the environment of the Go binary. Each entry is of the // form "key=value". // // If the `GoBinEnv` is nil, the result of the `os.Environ()` is used. // // If the `GoBinEnv` contains duplicate environment keys, only the last // value in the slice for each duplicate key is used. // // Note that GOPROXY (with comma-separated list support), GONOPROXY, // GOSUMDB, GONOSUMDB and GOPRIVATE are built-in supported. It means // that they can be set even the version of the Go binary targeted by // the `GoBinName` is before v1.13. GoBinEnv []string // GoBinMaxWorkers is the maximum number of commands allowed for the Go // binary to execute at the same time. // // If the `GoBinMaxWorkers` is zero, there is no limitation. GoBinMaxWorkers int // PathPrefix is the prefix of all request paths. It will be used to // trim the request paths via the `strings.TrimPrefix`. // // If the `PathPrefix` is not empty, it must start with "/", and usually // should also end with "/". PathPrefix string // Cacher is the `Cacher` that used to cache module files. // // If the `Cacher` is nil, the module files will be temporarily stored // in the local disk and discarded as the request ends. Cacher Cacher // CacherMaxCacheBytes is the maximum number of bytes allowed for the // `Cacher` to store a cache. // // If the `CacherMaxCacheBytes` is zero, there is no limitation. CacherMaxCacheBytes int // ProxiedSUMDBs is the list of proxied checksum databases. See // https://golang.org/design/25530-sumdb#proxying-a-checksum-database. // // If the `ProxiedSUMDBs` is not nil, each value should be given the // format of "<sumdb-name>" or "<sumdb-name> <sumdb-URL>". The first // format can be seen as a shorthand for the second format. In the case // of the first format, the corresponding checksum database URL will be // the checksum database name itself as a host with an "https" scheme. ProxiedSUMDBs []string // Transport is used to perform all requests except those started by // calling the Go binary targeted by the `GoBinName`. // // If the `Transport` is nil, the `http.DefaultTransport` is used. Transport http.RoundTripper // TempDir is the directory for storing temporary files. // // If the `TempDir` is empty, the result of the `os.TempDir()` is used. TempDir string // ErrorLogger is the `log.Logger` that logs errors that occur while // proxying. // // If the `ErrorLogger` is nil, logging is done via the `log` package's // standard logger. ErrorLogger *log.Logger // contains filtered or unexported fields }
Goproxy is the top-level struct of this project.
Note that the `Goproxy` will not mess with your environment variables, it will still follow your GOPROXY, GONOPROXY, GOSUMDB, GONOSUMDB and GOPRIVATE. It means that you can set GOPROXY to serve the `Goproxy` itself under other proxies, and by setting GONOPROXY and GOPRIVATE to indicate which modules the `Goproxy` should download directly instead of using those proxies. And of course, you can also set GOSUMDB, GONOSUMDB and GOPRIVATE to indicate how the `Goproxy` should verify the modules.
Since GOPROXY with comma-separated list support, GONOPROXY, GOSUMDB, GONOSUMDB and GOPRIVATE were first introduced in Go 1.13, so we implemented a built-in support for them. Now, you can set them even the version of the Go binary targeted by the `Goproxy.GoBinName` is before v1.13.
It is highly recommended not to modify the value of any field of the `Goproxy` after calling the `Goproxy.ServeHTTP`, which will cause unpredictable problems.