Исправление ошибки: получить gomodule в частном модуле с шаблоном сообщения об ошибке, подтверждающим git-host… чтение sum.golang.org/lookup… 410 пропало
Сегодня ясный день, воскресенье, Фундамент, но разрушенный чем-то, что меня на час взбесило. На самом деле, я застрял в этой проблеме с прошлой ночи (в субботу вечером), но, поскольку я очень устал, я решил остановиться, отдохнуть и продолжить снова в воскресенье.
Итак, я работал над Mabar (https://mabar.id) как одним из моих побочных проектов. Он все еще находится в бета-версии, по-прежнему не хватает многих функций, вы можете попробовать его в Android Play Store здесь
Я очень жду этого Mabar, это должна быть платформа, доступная во многих интерфейсах (мобильный, настольный, веб). Для технического стека я использую Golang в качестве бэкэнда, Kubernetes в качестве инфраструктуры и Digital Ocean за ними в качестве сервера.
Проблемы
Итак, проблема в том, что у меня есть частный модуль (модуль Golang), простая библиотека, которая будет импортирована моим внутренним API. Но почему-то я не могу получить модуль и всегда выхожу с ошибками, когда выполняю команду go get
.
Допустим, пакет называется lucifer
. И он всегда выдает ошибку на терминале. Это действительно меня разозлило.
$ go get -v bitbucket.org/compay/lucifer go: finding bitbucket.org/compay/lucifer latest go: downloading bitbucket.org/compay/lucifer v0.0.0-20190921175342-61a76c096369 verifying bitbucket.org/compay/[email protected]: bitbucket.org/compay/[email protected]: reading https://sum.golang.org/lookup/bitbucket.org/compay/[email protected]: 410 Gone
Если вы посмотрите сообщение, в нем говорится, что пакет пропал или недоступен на sum.golang.org.
Сначала я думаю, что это происходит из-за того, что я забыл применить SSH к битбакету, как я всегда писал здесь: https://medium.com/easyread/today-i-learned-fix-go-get-private-repository- return-error-terminal-prompts-disabled-8c5549d89045
Но это все еще не сработало. Он по-прежнему возвращает ошибку, когда я выполняю команды go get
, даже если я принудительно использую только SSH.
Коренные причины
Итак, после поиска этой проблемы в Интернете я нашел ее первопричины. Это происходит только на Golang с версии 1.13. Я могу убедиться в этом, прочитав этот выпуск https://golang.org/doc/go1.13#modules
Итак, это произошло потому, что в этой версии Golang появилась новая функция прокси.
Решения
На самом деле есть несколько решений, которые мы можем выбрать.
- Использование GOPRIVATE
Как указано в документации к выпуску Go 1.13,
Новая переменная среды GOPRIVATE указывает пути к модулям, которые не являются общедоступными. Он служит значением по умолчанию для переменных GONOPROXY и GONOSUMDB нижнего уровня, которые обеспечивают более детальный контроль над тем, какие модули выбираются через прокси и проверяются с помощью базы данных контрольных сумм.
Значит, чтобы решить проблему выше, мы можем просто заполнить переменную GOPRIVATE
в нашей системе. Добавьте эту команду в ~/.bashrc
. * Измените значение экспорта в зависимости от названия вашей компании / организации.
export GOPRIVATE="gitlab.com/
idmabar,bitbucket.org/
idmabar,github.com/
idmabar"
И чтобы проверить, сработало ли это, вы можете выполнить команду go env
. Так должно быть больше.
$ go env GO111MODULE="" GOARCH="amd64" GOBIN="" GOCACHE="/Users/imantumorang/Library/Caches/go-build" GOENV="/Users/imantumorang/Library/Application Support/go/env" GOEXE="" GOFLAGS="" GOHOSTARCH="amd64" GOHOSTOS="darwin" GOOS="darwin" GOPATH="/Users/imantumorang/go" GOPRIVATE="gitlab.com/idmabar,bitbucket.org/idmabar,github.com/idmabar" GOPROXY="https://proxy.golang.org,direct" GOROOT="/usr/local/Cellar/go/1.13/libexec" GOSUMDB="sum.golang.org" GOTMPDIR="" GOTOOLDIR="/usr/local/Cellar/go/1.13/libexec/pkg/tool/darwin_amd64" GCCGO="gccgo" AR="ar" CC="clang" CXX="clang++" CGO_ENABLED="1" GOMOD="" CGO_CFLAGS="-g -O2" CGO_CPPFLAGS="" CGO_CXXFLAGS="-g -O2" CGO_FFLAGS="-g -O2" CGO_LDFLAGS="-g -O2"
И теперь я могу выполнить команду go get
для своего личного репозитория.
$ go get bitbucket.org/company/lucifer go: finding bitbucket.org/company/lucifer latest go: downloading bitbucket.org/company/lucifer v0.0.0-20190921175342-61a76c096369 go: extracting bitbucket.org/company/lucifer v0.0.0-20190921175342-61a76c096369
Таким образом, этот env-variable
сообщит команде go get
использовать прокси частного хоста для получения пакета.
- Использование GONOSUMDB
Другое решение, возможно, с использованием переменной GONOSUMDB
. Я все еще не пробую это сделать, но после прочтения предложения https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md, похоже, он работает.
Таким образом, вы можете установить это в своей переменной среды:
export GONOSUMDB="gitlab.com/idmabar,bitbucket.org/idmabar,github.com/idmabar"
На самом деле эта проблема возникает только в новой версии Golang 1.13 и более поздних версиях. Поэтому перед обновлением версии Golang обязательно установите эту переменную среды.
Вот несколько ссылок, которые могут быть связаны с этой проблемой, благодаря noveaustack за то, что нашел это и разместил это в Stackoverflow, я просто репостил это, потому что я просто знаю эту проблему и как новую вещь, которую я узнал.
Ссылки
- Ответ Stackoverflow: https://stackoverflow.com/a/57887036/4075313
- Предложение по Go Sum DB для модуля go: https://go.googlesource.com/proposal/+/master/design/25530-sumdb.md
- Проксирование БД контрольной суммы: https://docs.gomods.io/configuration/sumdb/
- Проблемы на Github, связанные с этой проблемой: # 33985 и # 32291