# #go #tags #go-modules #go-get
Вопрос:
У меня есть (частное) репозиторий github с модулем Go. Я добавил тег v0.1
, и github показывает этот тег. Я установил go env -w GOPRIVATE=github.com/dwschulze/key-value-mod
, и мой ~/.gitconfig имеет [url "git@github.com:"] insteadOf = https://github.com/
Но go get
не могу получить свой модуль:
$ go get github.com/dwschulze/key-value-mod
go: github.com/dwschulze/key-value-mod upgrade => v0.0.0-20210907155619-9116b97467d6
go get: github.com/dwschulze/key-value-mod@v0.0.0-20210907155619-9116b97467d6: parsing go.mod:
module declares its path as: key-value-mod
but was required as: github.com/dwschulze/key-value-mod
$ go get github.com/dwschulze/key-value-mod@v0.1
go get github.com/dwschulze/key-value-mod@v0.1: no matching versions for query "v0.1"
В чем проблема go get
?
Комментарии:
1.
go get github.com/dwschulze/key-value-mod@latest
работает ли это2. @пробел — Нет. Это дает
go: github.com/dwschulze/key-value-mod latest => v0.0.0-20210907155619-9116b97467d6
. То же, что и выше.3. вы уверены, что опубликовали свой
git tag
? Вы можете пометить выпуск локально, но он не может быть перенесен в удаленное хранилище. Отображается ли выпуск тегов на веб-портале github? Если нет:git push --tags
4. Да, тег опубликован. Я также опубликовал еще один тег 0.1 на случай, если возникла проблема с буквой «v», но он делает то же самое. Я думаю
go get
, что это просто сломано.
Ответ №1:
Основываясь на ошибке, я не думаю, что у вас есть какие-либо проблемы с частным репо. Скорее, мне кажется, что ваш go.mod
файл объявляет модуль как
module key-value-mod
...
в то время как это должно быть
module github.com/dwschulze/key-value-mod
...
Комментарии:
1. Да, кажется, неустановленное требование, чтобы имя модуля было URL-адресом репозитория: groups.google.com/g/golang-nuts/c/hLkhogyFLWI . Еще одна вещь, которая помогла, — это очистить кэш модов.
Ответ №2:
Ваш семвер модулей go v0.1
неверен для go modules
потребления. Он включает в себя major
версию, minor
версию — но отсутствует patch
номер:
Примечание: Pre-release Identifier
суффикс здесь ( -beta.2
) необязателен.
См. также раздел публикация документов о модулях go:
Каждый необходимый модуль в go.mod имеет семантическую версию, минимальную версию этой зависимости, которую можно использовать для создания модуля.
Семантическая версия имеет вид vMAJOR.НЕЗНАЧИТЕЛЬНЫЙ.ПАТЧ.
Так что обновите свой тег v0.1.0
, и он должен работать.
Комментарии:
1. Я добавил тег v0.1.0 и столкнулся с той же проблемой.
Ответ №3:
Две вещи были причиной этого. Мне пришлось очистить кэш моего модуля. Во-вторых, как упоминает Саймон выше, имя модуля должно быть URL-адресом репозитория, где будет опубликован модуль.
Мне не нравится тесная связь модулей go с репозиториями исходного кода, но это реальность.
Комментарии:
1. Кроме того,
semver
формат по — прежнему требуется. Хотя вы можетеgo get <pkg>@v0.1
(без номера исправления), удаленный тег git ДОЛЖЕН иметь формат 3-number (vMajor.Minor.Patch
) для работы.