Некоторые подробности о модулях go

Go

предисловие

В некоторых проектах 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, вы можете подписаться на мой официальный аккаунт.