DevGang
Авторизоваться

Понимание go.mod и go.sum 

В этом блоге я постараюсь осветить основы go модуля, как работает управление зависимостями в проектах GoLang.

Я попытаюсь объяснить некоторые часто используемые команды , такие как go mod tidygo mod vendor, также моды кэширования в GoLang.

Файл go.mod - это корень управления зависимостями в GoLang. Все модули, которые необходимы или будут использоваться в проекте, хранятся в файле go.mod.

Для всех пакетов, которые мы собираемся импортировать / использовать в нашем проекте, будет создана запись этих модулей в go.mod. Наличие файла go.mod экономит усилия по запуску команды go get для каждого зависимого модуля для успешного запуска проекта.

(если вы хотите установить определенный пакет, вы можете установить его с помощью команды go get, например go get go.mongodb.org/mongo-driver)

go mod init — создает новый модуль, инициализируя файл go.mod, описывающий модуль. Вначале он только добавит путь к модулю и версию Go в файл go.mod.

После выполнения любой команды создания пакета, такой как go buildgo test
в первый раз, он будет устанавливать все пакеты с определенными версиями т.е. которые являются последними на данный момент. Он также создаст файл go.sum, который поддерживает контрольную сумму, поэтому при повторном запуске проекта он не установит все пакеты снова. Он использует кеш, который хранится в каталоге $GOPATH/pkg/mod (каталог кеша модуля).

go.sum - это сгенерированный файл, вам не нужно редактировать или изменять этот файл.

Теперь go.mod добавил все модули с версией в узел «require», пример файла go.mod выглядит примерно так:

Пример файла go.mod<br>
Пример файла go.mod

module подразумевает URL-адрес, поддерживаемый для контроля версий, то есть объявление модуля.

go 1.14 - это версия golang, которую использует этот проект, которая является последней на момент создания go.mod.

require будет включать все модули зависимостей и связанную версию, которую мы собираемся использовать в нашем проекте.

replace указывает на локальную версию зависимости в Go, а не на git-web. Он создаст локальную копию поставщика с доступными версиями, поэтому нет необходимости устанавливать каждый раз, когда мы хотим обратиться к поставщику.

//indirect подразумевает, что мы не используем эти зависимости внутри нашего проекта, но есть какой-то модуль, который их импортирует.

Все переходные зависимости являются косвенными, они включают зависимости, которые необходимы нашему проекту для правильной работы.

Использование Go mod tidy:

Он свяжет текущий импорт в проекте и пакетах, перечисленных в go.mod

go mod tidy обеспечивает соответствие файла go.mod исходному коду модуля. Он добавляет любые недостающие требования к модулю, необходимые для сборки пакетов и зависимостей текущего модуля, если есть какие-то неиспользуемые зависимости, go mod tidy соответственно удалит их из go.mod. Он также добавляет все недостающие записи в go.sum и удаляет ненужные записи.

Когда мы обновляем версию определенного пакета в go.mod, нам нужно запустить команду go mod tidy, чтобы обновить контрольные суммы в go.sum

Использование go mod vendor:

Он создает каталог поставщиков с доступными версиями. Он копирует все сторонние зависимости в папку поставщика в корне вашего проекта.

Это добавит все транзитивные зависимости, необходимые для запуска пакета поставщика. Когда вендоринг включен, команда go будет загружать пакеты из каталога vendor вместо загрузки модулей из их источников в кэш модулей и использования уже загруженных пакетов.

go clean -modcache

Эта команда используется для очистки кеша модов, который хранится в $GOPATH/pkg/mod. Эта команда используется для удаления установленных пакетов.
Флаг -modcache удаляет весь кеш загрузки модуля, включая распакованный исходный код версий зависимостей.

#Golang
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

В подарок 100$ на счет при регистрации

Получить