Where is the module cache in golang?
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
For Go 1.11, they are stored in
$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 (e.g., 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.