«go get» игнорирует GOPROXY при использовании http_proxy

#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 .