![深入浅出Go语言编程](https://wfqqreader-1252317822.image.myqcloud.com/cover/597/51454597/b_51454597.jpg)
2.3.5 网络代理GOPROXY
有可能我们在安装Go语言环境和编写“hello world”程序时都非常顺畅,但在下载第三方包时,网络成了我们最大的绊脚石!特别是以golang.org/x/开头的包,国内是无法直接访问该包的。
例如使用go get命令下载包golang.org/x/sys/windows时,可能会出现网络超时错误,示例如下。
package golang.org/x/sys/windows: unrecognized import path "golang.org/x/sys/windows"
(https fetch:
Get https://golang.org/x/sys/windows?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)
为了解决网络问题,不同版本的Go语言采取了不同的处理方式。
1.解决网络问题的方法
在Go1.11之前的版本中,解决网络问题首先要下载第三方软件包,然后根据软件包官方提供的下载路径创建与其对应的$GOPATH/src路径,最后运行go install命令安装此软件包。
在Go1.11版本之后,有了更简便的解决方法!使用与Go Module一起发布的Module proxy protocol来设置模块代理,然后将其交由环境变量GOPROXY处理,再然后通过代理的方式指引go命令抓取模块的路径,从而解决网络和路径的问题。从Go1.11版本开始,困扰用户很久的网络问题已不再是问题。通过设置环境变量GOPROXY,可以直接使用go get命令下载软件包。在Go1.13版本中,可以为GOPROXY设置多个代理列表,各代理服务器之间采用逗号分隔。此外,Go1.15版本还实现了社区的需求,添加了管道符“|”作为分隔符。
2.使用GOPROXY的注意事项
使用“go env -w GOPROXY=https://goproxy.cn,direct”命令配置环境变量GOPROXY时,请注意以下两点。
(1)在Go1.11和Go1.12版本中,需要将GO111MODULE配置成on才能使GOPROXY的配置生效。
(2)direct是Go1.13版本中新增的语法,目的是在一定程度上解决私有库的问题。其工作原理是若Go在抓取目标模块时遇到错误“404”,则回退到direct处,直接去目标模块的源头(比如GitHub)抓取。
3.环境变量的使用方法
在使用GOPROXY时,需要注意表2-2中提到的几个环境变量的使用方法。
表2-2 与GOPROXY有关的环境变量及其使用说明
![图片表格](https://epubservercos.yuewen.com/A1BDB6/30342208807686706/epubprivate/OEBPS/Images/table_53f4280c-9edd-4d94-827d-54eebd906cdd.jpg?sign=1739222176-5II3HPqPiMsC1OH57sm2Ukg6Rdce6HDE-0-9592d80625f8ef9d10a5f9c5ce4b00a6)