В предыдущей статье мы представилиGo Modules
. Модуль Go поддерживает Versioned Go и изначально решает проблему управления зависимостями пакетов.
Новый режим работы также приносит некоторые проблемы, в материковой части мы не можем пройти напрямуюgo get
Команда получает некоторые сторонние пакеты, наиболее распространенными являютсяgolang.org/x
Различные отличные пакеты ниже. После работы под модулем,go build
больше не будут заботиться о пакетах под GOPATH или поставщиком, но дляGOPATH/pkg/mod
Проверьте есть ли кеш, если нет, то загрузит определенную версию модуля, а для некоторых пакетов модуля часто глючит на материке. В этой статье основное внимание будет уделено реализации конфигурации прокси модуля go, включая следующие две конфигурации прокси:
- GOPROXY
- Athens
GOPROXY
goproxy — это проект с открытым исходным кодом.Когда пользователь запрашивает зависимую библиотеку, если он обнаруживает, что код не существует локально, он автоматически запрашивает источник, а затем кэширует его локально, чтобы пользователи могли запрашивать данные с goproxy.io. Разумеется, все это делается в одном запросе. goproxy.io поддерживает только режим модуля go. Когда пользователь выполняет команду go get, он проверяет$GOPROXY//@v/list
Есть ли версия, которую пользователь хочет получить в этом файле, если да, то получить по очереди$GOPROXY//@v/.info
,$GOPROXY//@v/.mod
,$GOPROXY//@v/.zip
Дождитесь файла, если нет, скачайте его прямо из библиотеки исходного кода.
Через команду:
export GOPROXY=https://goproxy.io
Эта переменная среды установлена. Как только настройка вступит в силу, последующие команды go будут передаватьсяgo module download protocol
иproxy
Интерактивная загрузка определенной версииmodule
. Конечно, мы также можем оставитьGOPROXY
переменная, чтобы закрытьGOPROXY
играет роль.
Видеть:GitHub.com/go прокси-IO/…
Athens
Athens — это проект, построенный на основе vgo (или 1.11+), пытающийся приблизить зависимости к вам, чтобы вы могли полагаться на повторяющиеся сборки, даже когда VCS не работает.Зависимости — это неизменяемые фрагменты кода и связанные с ними метаданные из Github. Они хранятся на складах, контролируемых Афинами.
Вы, вероятно, уже знаете, что означает «неизменный», но позвольте мне еще раз указать на это, потому что это очень важно для всей системы. Код Афин не меняется, когда люди меняют свои пакеты, повторяют, экспериментируют или делают что-то еще. Если автор пакета выпустит новую версию, Афины удалят ее. Например, проект зависит от версии пакета М.v1.2.3
, он никогда не изменит пакет на Афинах.
Установить
Афины поддерживают различные методы установки, Docker-контейнер, k8s и бинарные установочные пакеты.Эта статья расскажет, как установить через бинарные пакеты.
git clone https://github.com/gomods/athens
cd athens
make build-ver VERSION="0.2.0"
./athens -version
Получить приватные репозитории
Афины получают модули в частных репозиториях, что также является требованием уровня предприятия. Обычно частные репозитории предприятий требуют аутентификации, поэтому нам необходимо настроить учетную запись и учетные данные для доступа к частным репозиториям в Афинах. В настоящее время официальная документация Афин предусматривает пропуск через.netrc
способ доступа к функциональности приватных репозиториев с аутентификацией.
путем создания.netrc
файл для аутентификации частного репозитория.
//.netrc
machine github.com
login MY_USERNAME
password MY_PASSWORD
локальное приложение
export GO111MODULE=on
export GOPROXY=http://127.0.0.1:3000
Мы можем использовать Афины при условииwalkthrough
.
git clone https://github.com/athens-artifacts/walkthrough.git
$ cd ../walkthrough
$ go run .
go: finding github.com/athens-artifacts/samplelib v1.0.0
handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.info [200]
handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.mod [200]
go: downloading github.com/athens-artifacts/samplelib v1.0.0
handler: GET /github.com/athens-artifacts/samplelib/@v/v1.0.0.zip [200]
The 🦁 says rawr!
go run .
Выход включает попытку найтиgithub.com/athens-artifacts/samplelib
зависимости. Поскольку прокси-сервер работает в фоновом режиме, вы также можете увидеть выходные данные от Athens, указывающие на то, что он обрабатывает запросы на зависимости.
global public proxy
Афины также предоставляют экспериментальный прокси:athens.azurefd.net
Для глобального использования сусликов. Импортировать переменные среды:
export GOPROXY="https://athens.azurefd.net"
Конечно, хотя эти общедоступные прокси можно использовать, исходный код пакета не очень полный, поэтому самый безопасный способ — собрать сервис Athens самостоятельно. Согласно официальному выпуску:
athens.azurefd.net
Это альфа-версия, и инфраструктура в настоящее время не поддерживается должным образом, поэтому не удивляйтесь тайм-аутам. самодельныйAthens
Или используйте GoCenter (на данный момент единственный управляемый репозиторий модулей Go).
Рекомендуемое чтение
Инструмент управления пакетами для Go