Где находится кеш модуля в Голанге?
Когда я включаю gomodules и собираю свою программу go, загружаются необходимые пакеты.
Но я могу найти их в $GOPATH/src/ или в $GOPATH/src/mod.
Где они хранятся?
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
...
6 ответов
Чтобы определить расположение кеша, вы можете использовать go env:
go env|grep CACHE
Чтобы очистить кеши, используйте
go clean -modcache
или же
go clean -cache
в зависимости от типа очищаемого кеша.
Я на Macos 10.13.6, использую go1.11 darwin/amd64
а также echo $GOPATH
пустой.
Я нашел свои модули в $HOME/go/pkg/mod
Кеш модуля хранится в $GOPATH/pkg/mod
, или $HOME/go/pkg/mod
если $GOPATH
не установлен.
Примечание: как правило, кеш модуля доступен только для чтения и предназначен для использования в качестве неизменяемого кеша. Таким образом, вам никогда не следует пытаться редактировать что-либо там, а также запускатьgo
команды из кеша.
Кеш модуля содержит zip-файлы, распакованный исходный код модуля, а также кеш VCS (если не используется прокси). Кэш часто содержит несколько версий одной зависимости.
Если вы хотите проверить код зависимости в кеше модуля, вы можете cd
прямо в расположение распакованной зависимости через:
cd $(go list -f '{{.Dir}}' -m github.com/foo/bar)
Это запрашивает список перехода, чтобы сообщить о расположении каталога модуляgithub.com/foo/bar
в кеш-памяти модуля, по умолчанию используется та версия, которую вы в настоящее время используете в своем текущем модуле.
Поскольку предполагается, что кеш является неизменяемым, возникает связанный с этим вопрос, как вы редактируете зависимость (например, если вы хотите добавить журнал отладки или, возможно, при подготовке к отправке исправления восходящего потока для зависимости). Распространенным решением на этом этапе является использование gohack, который создает изменяемую копию зависимости (по умолчанию в$HOME/gohack
, но местоположение контролируется $GOHACK
переменная). gohack
также устанавливает ваш текущий go.mod
файл, чтобы иметь директиву replace, указывающую на эту изменяемую копию.
Если вы хотите очистить кеш, есть команда go clean --modcache
Если вам просто нужно обновить некоторую зависимость, вы, вероятно, захотите очистить информацию об этой зависимости из
- go.mod
- go.sum
- vendor / modules.txt