Go: depПрактически в любом проекте рано или поздно возникает необходимость использования сторонних библиотек. Многие современные языки имеют общепринятые пакетные менеджеры для управления зависимостями в приложении (npm для Node.js, Composer для PHP и др.). В Go существует достаточно много инструментов для управления пакетами от разных разработчиков. При этом, не все из них написаны на Go. ![]() Одним из таких инструментов является dep. В отличие от других, он был официальным экспериментом разработчиков команды Go, но пока не включен в официальный набор утилит. Поскольку у него есть все шансы стать стандартом, предлагаю с ним ознакомиться. Для установки разработчиками рекомендуется скачать готовый бинарник последнего релиза для вашей платформы. В MacOS установить или обновить до последней версии можно с помощью Homebrew:
Если интересно посмотреть как все работает, можно использовать go get. Компиляции из исходного кода потребуется Go 1.8 или выше.
Для начала работы создадим проект в $GOPATH и перейдем в его папку:
После этого нужно произвести инициализацию проекта:
Эта команда создаст в папке проекта папку vendor для хранения библиотек и файлы Gopkg.lock и Gopkg.toml. Есть еще пара полезных команд:
Главная команда dep ensure. Слово ensure (гарантировать, обеспечивать) означает то, что будет выполнена не дискретная операция (как добавление зависимости), а что-то целостное. Вместо того, чтобы выполнять несколько последовательных команд для изменения состояния проекта, каждый запуск dep ensure обеспечивает полный, безопасный и воспроизводимый набор изменений состояния проекта. Это означает, что на диск будет записано всё или ничего. За исключением критический ситуаций. Существует четыре ситуации, когда использовать dep ensure:
Допустим, нам нужен пакет github.com/pkg/errors. Его можно добавить командой:
Команды dep ensure и dep status как и команды git можно вызывать из любых подпапок проекта. После успешного добавления пакета будет изменен файл Gopkg.lock и содержимое папки vendor. Версия пакета github.com/pkg/errors будет добавлена в Gopkg.toml однако мы получим предупреждение: "github.com/pkg/errors" is not imported by your project, and has been temporarily added to Gopkg.lock and vendor/. If you run "dep ensure" again before actually importing it, it will disappear from Gopkg.lock and vendor/. Это означает, что мы должны использовать import "github.com/pkg/errors" где-то в коде проекта. Иначе после вызова dep ensure этот пакет будет отмечен как неиспользуемый и удалён из папки vendor и файла Gopkg.lock. Можно поступить наоборот. Сначала использовать import в коде, а затем установить зависимость, например создать файл main.go:
и выполнить dep ensure. Все зависимости будут разрешены, более того, если до этого dep не был инициирован, то зависимости для существующего кода будут скачаны сразу после dep init. Отдельный пакет можно обновить командой:
Или при необходимости попытаться обновить всё сразу:
Содержимое директории vendor и файл Gopkg.lock редактировать не нужно. Они генерируются автоматически. А файл Gopkg.toml предоставляет пять основных типов правил, для настройки:
20.06.2018 |
популярные тэги
наука
интересно
новости
технологии
история
go
golang
программирование
it
искусственный интеллект
путешествия
природа
космос
ai
базы данных
медицина
science
анализ текстов
ии
text mining
робототехника
авто
музыка
роботы
интернет
нейронные сети
robots
space
вокруг света
postgresql
алгоритмы
гитара
животные
оружие
google
nosql
авиация
здоровье
техника
auto
|