Ответ
Современный стандарт управления зависимостями в Go — это Go Modules (go mod), встроенный в язык начиная с версии 1.11.
Go Modules
Это система, которая позволяет управлять зависимостями проекта, версионировать их и обеспечивает воспроизводимость сборок. Основные компоненты:
go.mod: Файл в корне проекта, который определяет модуль, его зависимости и их версии. Он создается командойgo mod init <module_path>.go.sum: Автоматически генерируемый файл, содержащий контрольные суммы каждой зависимости. Это гарантирует, что вы используете в точности те же версии пакетов, что и другие разработчики.
Основные команды:
# Инициализирует новый модуль в текущей директории
go mod init my/project
# Добавляет новые зависимости или обновляет существующие
go get github.com/sirupsen/logrus@v1.9.0
# Удаляет неиспользуемые зависимости из go.mod и добавляет недостающие
go mod tidy
# Загружает зависимости в локальный кеш
go mod download
Исторические инструменты
До появления Go Modules использовались другие подходы:
GOPATH: Изначальный подход, при котором все проекты и их зависимости должны были находиться внутри единой директории$GOPATH. Управление версиями было ручным и неудобным.dep: Официальный, но экспериментальный инструмент передgo mod. Он использовал файлыGopkg.tomlиGopkg.lockдля фиксации версий.glide: Один из первых и популярных сторонних менеджеров зависимостей.
На сегодняшний день Go Modules является единственным рекомендуемым и повсеместно используемым способом управления зависимостями в Go.
Ответ 18+ 🔞
А, слушай, про управление зависимостями в Go? Ну это, блядь, целая эпопея, как история про Герасима и Муму, только с кодом, ёпта!
Вот сейчас, внатуре, золотой стандарт — это Go Modules (go mod). Встроили эту хуйню прямо в язык, начиная с версии 1.11, и слава богу, а то раньше был пиздец, как у Толстого до революции.
Go Modules: наше всё, блядь
Это такая система, которая за тебя всё делает: зависимости качает, версии фиксирует, чтобы у тебя и у твоего коллеги сборка не разъебалась в разные стороны. Основа основ — два файлика:
go.mod: Это как паспорт твоего проекта. Лежит в корне, говорит, как модуль зовут и какие пакеты ему, сука, нужны. Создаёшь командойgo mod init my/project— и поехали.go.sum: А этот файл автоматом генерируется, в нём контрольные суммы всех зависимостей. Это чтобы никакой левый пидорас не подсунул тебе изменённую библиотеку, пока ты не смотришь. Доверия, блядь, ноль ко всем.
Основные команды, которые надо знать:
# Инициализирует новый модуль в текущей директории
go mod init my/project
# Добавляет новые зависимости или обновляет существующие
go get github.com/sirupsen/logrus@v1.9.0
# Удаляет неиспользуемые зависимости из go.mod и добавляет недостающие
go mod tidy
# Загружает зависимости в локальный кеш
go mod download
А раньше-то, блядь, что было? Исторический ликбез!
Ой, ёпта, были времена, волосы дыбом встают! Как будто в каменном веке жили.
GOPATH: Это, сука, самый древний способ. Представляешь, все твои проекты и все библиотеки от них должны были валяться в одной общей папке$GOPATH! Управлять версиями? Да хуй там! Ручками качал, ручками следил, чтобы ничего не сломалось. Полный распиздяйский подход, блядь.dep: Потом появился этот официальный, но экспериментальный инструмент. Уже лучше, файлыGopkg.tomlиGopkg.lockбыли. Но всё равно как костыль, ёбаный в рот.glide: А это один из первых сторонних менеджеров, народ хватался за него, как утопающий за соломинку.
Короче, пиздец был, а не разработка. Сейчас-то всё просто: Go Modules — это единственный нормальный, рекомендованный и повсеместно используемый путь. Всё остальное — в утиль, в исторический музей, вместе с деревянными Чиполлино!