【发布时间】:2021-02-04 01:28:25
【问题描述】:
我正在尝试让 Go 使用内部企业 Go-Proxy 进行模块下载 - 这需要可访问 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不包含我的 Go-Proxy 的 IP 或主机名 -
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 直接连接到 golang.org 上的原始 url(为简洁起见,省略了选项/序列和 ack 号),代理/防火墙块。
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?我没有正确设置吗?
我在 golang:1.15.3 Docker 容器中使用 Go 1.15.3(添加了一些工具来检查连接)
【问题讨论】:
-
go env是否将GOPROXY变量设置为您希望设置的值? -
@kostix 是的,确实如此。当我使用
go env -w GOPROXY=...设置它时,以及当我只使用export GOPROXY=... -
您是否偶然设置了
GONOPROXY(参见this)? -
我不这么认为:go env 显示它是空的 (
GONOPROXY="")