go get не может получить модуль из частного репозитория на github

# #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 номер:

v1.4.0-бета.2

Примечание: 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 ) для работы.