#go #proxy
#Вперед #прокси
Вопрос:
Я пытаюсь заставить Go использовать внутренний корпоративный Go-Прокси для загрузки модуля, для чего требуется доступ к http_proxy (корпоративный брандмауэр). Однако go get -u golang.org/x/lint/golint
сбой:
пакет golang.org/x/lint/golint : нераспознанный путь импорта «golang.org/x/lint/golint «: https fetch: Получить «https://golang.org/x/lint/golint?go-get=1 «: Запрещено
Моя настройка:
http_proxy
иhttps_proxy
переменные среды устанавливаютсяno_proxy
не содержит IP или имя хоста моего Go-проксиGOPROXY
установлен (go env -w GOPROXY=https://artifactory.mycompany.com/api/go/myrepo-go-virtual
)
Я проверил:
- Использование curl и прямой запрос к серверу GOPROXY работают нормально, и я могу загрузить файл (поэтому работает настройка https_proxy)
- Встречная проверка с помощью curl и явное отключение http / https_proxy: нет соединения, как и ожидалось
Используя tcpdump, я обнаружил, что запуск go get
, похоже, игнорирует мой GOPROXY и просит мой http_proxy напрямую подключиться к исходному URL на golang.org (Номера параметров / последовательности и подтверждения опущены для краткости), которые блокирует прокси / брандмауэр.
06:52:53.926397 IP <my_ip.port> > <proxy.port>: Flags [S], length 0
06:52:53.927206 IP <proxy.port> > <my_ip.port>: Flags [S.], length 0
06:52:53.927232 IP <my_ip.port> > <proxy.port>: Flags [.], length 0
06:52:53.932003 IP <my_ip.port> > <proxy.port>: Flags [P.], length 89: HTTP: CONNECT golang.org:443 HTTP/1.1
06:52:53.932638 IP <proxy.port> > <my_ip.port>: Flags [.], length 0
06:52:53.933100 IP <proxy.port> > <my_ip.port>: Flags [P.], length 3939: HTTP: HTTP/1.1 403 Forbidden
Вопрос: Почему Go игнорирует GOPROXY? Я что-то неправильно настроил?
Я использую Go 1.15.3 в golang:1.15.3
контейнере Docker (с некоторыми дополнительными инструментами для проверки подключения)
Комментарии:
1.
go env
Отображает лиGOPROXY
переменная значение, которое вы ожидаете, что оно будет установлено?2. @kostix Да, это так. Как когда я использую
go env -w GOPROXY=...
для его установки, так и когда я просто используюexport GOPROXY=...
3. У вас случайно
GONOPROXY
установлен (см. Это )?4. Я так не думаю: go env показывает, что он пустой (
GONOPROXY=""
)
Ответ №1:
Попробуйте следующее: установите GO111MODULE=on
значение использовать GOPROXY
или запускать go mod init
перед запуском go get
Комментарии:
1.
GO111MODULE=on
сделал свое дело. Спасибо — это сводило меня с ума.2. посмотрите эту страницу, если хотите углубиться: < dev.to/maelvls /… >
3. @ws_, зачем нужно было устанавливать это с помощью Go 1.15.3? Вы имеете в виду (странную) суперпозицию этих двух фактов: 1) OP проверил свой проект под GOPATH и 2) при работе под GOPATH
GOPROXY
не рассматривается какgo
работающий в немодульном, устаревшем режиме?4. @kostix Ваши описания верны. На сайте провайдера go proxy обычно они предоставляют такую инструкцию, как
goproxy.io
. Лучший способ — запуститьgo mod init
передgo get
использованиемGOPROXY
и забытьGO111MODULE
.