Исправление ошибки: получить 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, я просто репостил это, потому что я просто знаю эту проблему и как новую вещь, которую я узнал.

Ссылки