Кеш модуля - это каталог, в котором команда go хранит загруженные файлы модулей. Кеш модуля отличается от кеша сборки, который содержит скомпилированные пакеты и другие артефакты сборки.
Расположение кеша модуля по умолчанию - $GOPATH/pkg/mod. Чтобы использовать другое расположение, установите переменную среды GOMODCACHE.
Кеш модуля не имеет максимального размера, и команда go не удаляет его содержимое автоматически.
Кеш может использоваться несколькими проектами Go, разработанными на одной машине. Команда go будет использовать один и тот же кеш независимо от расположения основного модуля. Несколько экземпляров команды go могут одновременно безопасно обращаться к одному и тому же кешу модуля.
Команда go создает исходные файлы модулей и каталоги в кеше с разрешениями только для чтения, чтобы предотвратить случайные изменения модулей после их загрузки. Это имеет неприятный побочный эффект, затрудняя удаление кеша с помощью таких команд, как rm -rf. Вместо этого кеш можно удалить с помощью go clean -modcache. В качестве альтернативы, когда используется флаг -modcacherw, команда go создаст новые каталоги с разрешениями на чтение и запись. Это увеличивает риск того, что редакторы, тесты и другие программы изменят файлы в кеше модуля. Команду go mod verify можно использовать для обнаружения изменений зависимостей основного модуля. Он сканирует извлеченное содержимое каждой зависимости модуля и подтверждает, что оно соответствует ожидаемому хешу в go.sum.
Ниже объясняется назначение большинства файлов в кеш-памяти модуля. Некоторые временные файлы (файлы блокировки (lock files), временные каталоги) опускаются. Для каждого пути $module - это путь к модулю, а $version - это версия. Пути, заканчивающиеся косой чертой (/), являются каталогами. Заглавные буквы в путях и версиях модулей экранируются восклицательными знаками (Azure заменяется !azure), чтобы избежать конфликтов в файловых системах без учета регистра.
Путь $module@$version/
Каталог, содержащий извлеченное содержимое .zip файла модуля. Он служит корневым каталогом для загруженного модуля. Он не будет содержать файл go.mod, если его не было в исходном модуле.
Путь cache/download/
Каталог, содержащий файлы, загруженные из прокси-серверов модуля, и файлы, полученные из систем контроля версий. Структура этого каталога соответствует протоколу GOPROXY, поэтому этот каталог может использоваться в качестве прокси-сервера, когда он обслуживается файловым сервером HTTP или когда на него ссылается URL-адрес file://.
Путь cache/download/$module/@v/list
Список известных версий. Это может измениться со временем, поэтому команда go обычно выбирает новую копию вместо того, чтобы повторно использовать этот файл.
Путь cache/download/$module/@v/$version.info
Метаданные JSON о версии. Это может измениться со временем, поэтому команда go обычно выбирает новую копию вместо того, чтобы повторно использовать этот файл.
Путь cache/download/$module/@v/$version.mod
Файл go.mod для этой версии. Если в исходном модуле не было файла go.mod, это синтезированный файл без требований.
Путь cache/download/$module/@v/$version.zip
Заархивированное содержимое модуля.
Путь cache/download/$module/@v/$version.ziphash
Криптографический хеш файлов в .zip файле. Обратите внимание, что сам файл .zip не хешируется, поэтому порядок файлов, сжатие, выравнивание и метаданные не влияют на хеш. При использовании модуля команда go проверяет, соответствует ли этот хеш соответствующей строке в go.sum. Команда go mod verify проверяет соответствие хешей .zip файлов модуля и извлеченных каталогов этим файлам.
Путь cache/download/sumdb/
Каталог, содержащий файлы, загруженные из базы данных контрольных сумм (обычно sum.golang.org).
Путь cache/vcs/
Содержит клонированные репозитории управления версиями для модулей, извлеченных непосредственно из их источников. Имена каталогов представляют собой хеши в шестнадцатеричной кодировке, производные от типа репозитория и URL-адреса. Репозитории оптимизированы по размеру на диске. Например, клонированные репозитории Git по возможности являются пустыми и неглубокими.
Читайте также:
- Модули в Golang: частные модули, передача учетных данных частным прокси
- Модули в Golang: частные модули, передача учетных данных в частные репозитории
- Модули в Golang: частные модули, конфиденциальность
Комментариев нет:
Отправить комментарий