简体   繁体   中英

Where is the module cache in golang?

When I enable gomodules and build my go program then the required packages are downloaded.

But I cannot find them in $GOPATH/src/ or in $GOPATH/src/mod .

Where are they stored?

export GO111MODULE=on
go mod init
go build main.go 
go: finding github.com/sirupsen/logrus v1.0.6
go: downloading github.com/sirupsen/logrus v1.0.6
...

对于 Go 1.11,它们存储在

$GOPATH/pkg/mod

The module cache is stored in $GOPATH/pkg/mod , or $HOME/go/pkg/mod if $GOPATH is not set.

Note : in general, the module cache is read-only, and is intended to be an immutable cache. As such, you should never try to edit things there, nor should you run go commands from inside the cache.

The module cache contains the zip files, unpacked module source code, as well as a VCS cache (when not using a proxy). The cache often contains multiple versions of a single dependency.

If you want to inspect the code of a dependency in the module cache, one shortcut is you can cd directly to the location of an unpacked dependency via:

cd $(go list -f '{{.Dir}}' -m github.com/foo/bar)

That asks go list to report on the directory location of the module github.com/foo/bar within the module cache, defaulting to whatever version you currently are using in your current module.

Given the cache is intended to be immutable, a related question is how do you edit a dependency (eg, if you want to add a debug log, or perhaps in preparation for sending an upstream fix for a dependency). A common solution at this point is to use gohack , which creates a mutable copy of a dependency (by default in $HOME/gohack , but the location is controlled by $GOHACK variable). gohack also sets your current go.mod file to have a replace directive to point to that mutable copy.

I'm on Macos 10.13.6, using go1.11 darwin/amd64 and echo $GOPATH is empty.

I found my modules in $HOME/go/pkg/mod

In case you want clean up cache there is a command go clean --modcache

In case you just need to update some dependency you probably want to clean up information about this dependency from

  • go.mod
  • go.sum
  • vendor/modules.txt

Run this in terminal

go env GOMODCACHE

go env - Print all Go environment information

go env NAME - Print specific env var.

To determine cache locations, you can use go env:

go env|grep CACHE

To clean the caches, use go clean -modcache or go clean -cache depending on the type of cache to be cleared.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM