предисловие
В некоторых проектах Java есть инструменты управления версиями, такие как Maven, которые могут очень хорошо управлять различными зависимостями версий, однако в проектах Golang официальное средство управления версиями ранее не предоставлялось, и для его установки использовался go get. проект становится больше, бороться с этой зависимостью становится громоздко,оригинальный.
Если вы заинтересованы в Go, вы можете подписаться на мой публичный аккаунт: GoGuider
механизм поставщика
Чтобы решить проблему зависимости от версии, официально вводится механизм вендора, и пакеты, от которых зависит проект, помещаются в этот каталог, но это плохо справляется с версиями зависимостей.
Потому что у вендорского механизма есть несколько больших проблем:
1. Внешняя библиотека должна быть помещена в проект, что приводит к тому, что объем проекта становится очень большим
2. Версии проекта трудно указать и контролировать
go dep and go модули
После этого был официально выпущен квазиофициальный инструмент управления версиями go dep, который является предшественником модулей go. С выпуском Go1.11 Golang предоставил нам новые функции модуля, который представляет собой новый набор системы управления зависимостями в Golang. После выпуска Go1.12 модули го были дополнительно стабилизированы, но правительство не установило его в качестве механизма по умолчанию, поэтому необходимо встать на путь.Помимо детализации характеристик и использования модулей го, это Статья также суммирует некоторые «ямы», с которыми я столкнулся в процессе.
В настоящее времяgo help mod
,go help modules
,go help module-get
Вы можете узнать об использовании некоторых модулей go, но некоторые способы использования представлены недостаточно подробно, и нам нужно догадаться, поэтому сегодня я составил статью, чтобы разобраться с вами.
С go1.12 выйдет. Это первый стабильный релиз, который включает модули go в официальную поддержку. go модули представляют go.mod, мы можем лучше управлять внешними библиотеками и версиями.
Уточните версию в go.mod
При использовании go get, если мы хотим указать некоторую информацию о версии, мы можем обратиться к следующим операциям:
go get github.com/mqu/go-notify@ef6f6f49
В файле go.mod нам это тоже нужно указать, а целевая библиотека приносит указанную версию, чтобы можно было уточнить версию при установке, избежав неизбежных неприятностей, и повысив определенность и безопасность проекта.
Так что вам также нужно указать версию, подобную этой, в go.mod
module github.com/goguider/hello
go 1.12
require (
cloud.google.com/go v0.37.1 // indirect
github.com/PuerkitoBio/goquery v1.5.0
github.com/araddon/dateparse v0.0.0-20190223010137-262228af701e
github.com/b3log/gulu v0.0.0-20190806034141-2b1d1b33ff3d
github.com/b3log/lute v0.0.0-20190922061740-a6de76dabec1
github.com/beevik/etree v1.1.0 // indirect
github.com/bluele/gcache v0.0.0-20190301044115-79ae3b2d8680
...
)
После выпуска модулей go адрес ссылки на пакет полностью унифицируется.Как мы уже говорили выше, после создания файла go.mod первая строка содержимого инициализации — это то, что мы называем путем зависимости проекта.Вообще говоря, адрес является складом проекта. Адрес, все адреса, которые должны ссылаться на пакет проекта, должны заполнить этот адрес, будь то внутренняя ссылка или внешняя ссылка
команды, связанные с модом go
download download modules to local cache (下载依赖的module到本地cache))
edit edit go.mod from tools or scripts (编辑go.mod文件)
graph print module requirement graph (打印模块依赖图))
init initialize new module in current directory (再当前文件夹下初始化一个新的module, 创建go.mod文件))
tidy add missing and remove unused modules (增加丢失的module,去掉未用的module)
vendor make vendored copy of dependencies (将依赖复制到vendor下)
verify verify dependencies have expected content (校验依赖)
why explain why packages or modules are needed (解释为什么需要依赖)
В конце будет файл go.sum
За каждой импортированной библиотекой следует уникальный тег для управления версией, то есть номер версии + отметка времени + хэш.
Если вы также заинтересованы в Go, вы можете подписаться на мой официальный аккаунт.